Python函数参数传递"在"之间电话

时间:2015-08-08 02:05:05

标签: python user-defined-functions

这是一本书中的一个例子" 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并决定将其用作参数?作者并没有真正解释发生了什么。

0 个答案:

没有答案