2010-08-12 88 views
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仍然绑定到它。但是,再次,我想知道如何仍然得到相同的默认值,而不是一个新的[]。有人能为我解决这个问题吗?

谢谢!

回答