默认参数动态调用原因
Topic source代码
def add_end(L=[]):
if L == []:
s = []
s.append('END')
return s
L.append('END')
return L
- 1
代码
def add_end(L=[]):
if L == []:
s = []
s.append('END')
return s
L.append('END')
return L
用户6017763250
defadd_end(L=[]):
if L == []:
s = []
s.append('END')
return s
L.append('END')
return L
defadd_end(L=[]):
if L == []:
s = []
s.append('END')
return s
L.append('END')
return L
defadd_end(L=[]):
if L == []:
s = []
s.append('END')
return s
L.append('END')
return L
对该方面的浅薄猜测,如果存在有错误,希望能在评论区给予指正
作者提到:
换个说法就是:Python在第一次调用该函数的时候,会单独为默认参数设置一个地址,并且该地址在函数运行完后不会消失。当再次调用这个函数时,便会提取默认参数地址的值,从而导致了这个结果。
而对于作者的解:
其主要原理是在函数内部新建立了一个变量,而该变量在函数调用完毕之后便会消失,因此这个解相当于在每次调用函数时重新创建L,以解决上述的问题。根据这个想法,这个问题也可以这样解决
**defadd_end(L=[]):**
**if L == []:**
** s = []**
** s.append('END')**
**return s**
** L.append('END')**
**return L**
最后,为什么正常调用没关系?
因为传递的是地址,因此不需要从默认参数地址中提取。
大家可以用id()函数求变量地址来试一试。