我从一本书(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']。但是,我只是在书中得到了真实的信息。
请问你能告诉我怎么可能吗?