这是一本书中的一个例子" Introducing Python"作者Bill Lubanovic阐述了用户定义函数的一些基础知识:
def buggy(arg, result = []):
result.append(arg)
print(result)
buggy('a')
buggy('b')
"期待"在两种情况下,输出都是仅包含arg
的列表,但在第二次调用之后,获取列表['a', 'b']
,表明result
正在转移到下一个调用。也许这并不令人惊讶,但当我尝试打印这个对象时它并不存在:
In [53]: def buggy(arg, result = []):
....: result.append(arg)
....: print(result)
....:
In [54]: buggy('a')
['a']
In [55]: result
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-55-a5b1e83cd027> in <module>()
----> 1 result
NameError: name 'result' is not defined
In [56]: buggy('b')
['a', 'b']
这到底发生了什么?是result
在函数外部不存在的问题,但不知何故,buggy
&#34;的第二次调用知道&#34;关于第一次调用创建的result
并决定将其用作参数?作者并没有真正解释发生了什么。