我刚开始学习Python,我对这个例子感到困惑:
def append_to(element,to=None):
if to is None:
to = []
to.append(element)
return to
最佳答案
If “to” was initialized once,wouldn’t “to” won’t be “None” the 2nd time it’s called?
如果您没有为它传递值,则将变为None:append_to(1)并且仅当to为None时,您的代码才会将本地名称重新绑定到函数体内新创建的列表:to = [].
函数的默认值只分配一次,即您指定为默认值的任何内容,该对象将用于您对函数进行的每次调用,并且不会更改,通常每次使用相同的默认值引用打电话给你做功能.将mutable分配为默认值时,这很重要:
l = []
def defArgs(d=l) # default arguments,same default list for every call
d.append(1)
return d
defArgs() is l # Object identity test: True
多次运行上面的函数,您将观察到列表越来越多,因为每个函数调用共享的每个函数只能获得一个参数默认值的副本.但请注意:
def localVars(d=None):
if d is None:
d = [] # Different list for every call when d is None
每次调用localVars时都会执行d = [];当函数完成其工作时,每个局部变量在引用计数降为0时被垃圾收集,但不是参数的默认值,它们在执行函数后生存,并且在执行函数后通常不进行垃圾收集.