【发布时间】:2010-08-12 05:40:30
【问题描述】:
我今天正在阅读这篇文章:http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#default-parameter-values,我似乎无法理解幕后发生的事情。
def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
这里的问题是默认 a_list 的值,一个空列表,是 在函数定义时评估。 所以每次调用函数时, 你得到相同的默认值。尝试一下 几次:
我想首先,函数定义阶段是什么时候?是在实际 main 函数执行之前的初始化阶段吗?
我最初的想法是在函数运行后名称 a_list 会立即被丢弃,因此无论 [] 突变为什么都将被垃圾收集。现在,我认为 a_list 根本没有被丢弃,因为它只是绑定到对象 [] 的名称,因此它永远不会被垃圾收集,因为 a_list 仍然绑定到它。但话又说回来,我想知道我如何仍然获得相同的默认值而不是新的[]。有人可以为我解决这个问题吗?
谢谢!
【问题讨论】: