2
我今天看到这个:http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#default-parameter-values我似乎无法理解底下发生了什么。关于使用默认参数值的python名称的问题
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
的这里的问题是,默认 值的a_list的,空列表,在函数定义时间 评估。 因此,每次调用函数 时,都会得到相同的默认值。试试吧 几次:
我想首先,什么时候是函数定义阶段?它是在实际的主函数执行之前的初始化阶段吗?
我最初的想法是,在函数运行后,名字a_list被放弃,所以无论[]
被突变为将被垃圾收集。现在,我认为a_list根本不会被丢弃,因为它只是绑定到对象[]
的名称,所以它永远不会被垃圾收集,因为a_list仍然绑定到它。但是,再次,我想知道如何仍然得到相同的默认值,而不是一个新的[]
。有人能为我解决这个问题吗?
谢谢!