在函数中将可变对象作为默认参数传递-奇怪的行为

时间:2018-12-01 05:51:45

标签: python default-value

请以可变对象function作为默认参数,对此list进行细心研究:

def foo(x, items = []):
    items.append(x)
    return items
foo(1)      #returns [1]
foo(2)      #returns [1,2]
foo(3)      #returns [1,2,3]

我很好奇为什么会这样?我的意思是,我已经读到function's范围一旦完成执行就终止,因此第一次调用中的items必须在第一次调用之后被销毁。然后,我尝试检查items是否在全局范围内。

>>> print(items)
>>> Traceback (most recent call 
    File "c:\Users\GauriShanker\Desktop\mypython\test.py", line 9, in <module>
    print(items)
    NameError: name 'items' is not defined.

事实并非如此。 我很好奇:

  1. 为什么每次调用后items变量都没有被销毁。显而易见,每个后续函数调用都从上一个函数调用中选取items变量的值。如果items变量不在全局范围内,它将在何处存在?为什么?
  2. 当我没有在函数调用中明确提供第二个论据时,它是否应仅使items等于[]作为默认值。声明默认参数不是全部内容吗?确实仅在第一次通话中将items设置为[],而在第二次和第三次通话中没有设置。

请指导。

0 个答案:

没有答案