函数定义时计算的默认参数值?

时间:2014-05-07 12:14:09

标签: python

我从一本书(Python简介)中非常了解Python的一个例子。

我理解的第一个相关例子:

 >>>def buggy(arg, result=[]):
 ...    result.append(arg)
 ...    print(result)
 ...
 >>buggy('a')
 ['a']
 >>>buggy('b')
 ['a', 'b']

上面的示例说明了在定义函数时计算默认参数值,而不是在运行时计算。这对我来说很有意义。

下一个示例显示了如何避免此问题。它有效,但我不明白。

>>>def nonbuggy(arg, result=None):
...    if result is None:
...        result = []
...    result.append(arg)
...    print(result)
...
>>>nonbuggy('a')
['a']
>>>nonbuggy('b')
['b']

我的理解(显然是错误的)是当它第一次运行时,结果是None,因此应该执行result = []并且' a'追加。

第二次运行时,结果不是无(它是' a'),所以只有' b'应该附加,所以我希望返回[' a',' b']。但是,我只是在书中得到了真实的信息。

请问你能告诉我怎么可能吗?

0 个答案:

没有答案