请以可变对象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.
事实并非如此。 我很好奇:
items
变量都没有被销毁。显而易见,每个后续函数调用都从上一个函数调用中选取items
变量的值。如果items
变量不在全局范围内,它将在何处存在?为什么?items
等于[]
作为默认值。声明默认参数不是全部内容吗?确实仅在第一次通话中将items
设置为[]
,而在第二次和第三次通话中没有设置。请指导。