gpt4 book ai didi

python - Python中默认参数的范围是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:21:53 39 4
gpt4 key购买 nike

在 Python 中使用数组参数定义函数时,该参数的作用域是什么?

这个例子取自 Python 教程:

def f(a, L=[]):
L.append(a)
return L

print f(1)
print f(2)
print f(3)

打印:

[1]
[1, 2]
[1, 2, 3]

我不太确定我是否理解这里发生的事情。这是否意味着数组的范围在函数之外?为什么数组会记住每次调用的值?来自其他语言,只有当变量是静态的时,我才会期望这种行为。否则,它似乎应该每次都重置。实际上,当我尝试以下操作时:

def f(a):
L = []
L.append(a)
return L

我得到了我所期望的行为(数组在每次调用时都被重置)。

所以在我看来,我只需要解释 def f(a, L=[]): 行 - L 变量的范围是什么?

最佳答案

范围如你所料。

也许令人惊讶的是,默认值只计算一次并重复使用,因此每次调用函数时都会得到相同的列表,而不是初始化为 [] 的新列表。

列表存储在 f.__defaults__(或 Python 2 中的 f.func_defaults)中。

def f(a, L=[]):
L.append(a)
return L

print f(1)
print f(2)
print f(3)
print f.__defaults__
f.__defaults__ = (['foo'],) # Don't do this!
print f(4)

结果:

[1]
[1, 2]
[1, 2, 3]
([1, 2, 3],)
['foo', 4]

关于python - Python中默认参数的范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2335160/

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