gpt4 book ai didi

Python 函数定义中的变量作用域

转载 作者:行者123 更新时间:2023-12-01 02:04:00 24 4
gpt4 key购买 nike

我对下面的Python代码感到非常惊讶

def f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)

f(2) #[0, 1]
f(3) #[0, 1, 0, 1, 4]

问题是为什么Python使用相同的l列表,在函数定义中时始终定义为 l=[]

最佳答案

默认值在函数定义时绑定(bind)。将字典或列表指定为默认值时,这是一个常见的“陷阱”。

有关一些其他详细信息,请参阅 this blog post ,其中有一个关于可变默认值的部分。

你可以将其视为当Python解释器第一次看到函数定义时创建对象并将其绑定(bind)到形参名称。从那时起,当调用该函数时,如果不存在用户提供的值,则会向该函数提供相同的可变对象。

一开始这确实令人惊讶,但它符合 python 的工作方式。

关于Python 函数定义中的变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com