gpt4 book ai didi

python - Python 函数定义中的列表构建

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:25 25 4
gpt4 key购买 nike

我想构建一个这样的原型(prototype):

def foo(a,t=([0]*len(a))):
print t

出于目前不重要的原因。我将可变长度列表参数传递给 .然而,Linux 上的 Python 2.7.10 总是返回如下:

>>> a = [1,2,3,4]
>>> foo(a)
[O, 0]

如果没有函数调用,这一切都不会以意想不到的方式运行。是什么导致 Python 在 foo() 中的变量赋值期间始终认为传递的列表长度为 2?

最佳答案

您不能为所欲为,因为函数默认值在创建函数时执行,而不是在调用时执行。

函数中创建列表:

def foo(a, t=None):
if t is None:
t = [0] * len(a)
print t

None 在这里是一个有用的哨兵;如果 t 保留设置为 None,您知道没有为其指定值,因此您创建新列表来替换它。这也巧妙地避免了将可变变量存储为默认值(参见 "Least Astonishment" and the Mutable Default Argument 为什么这可能不是一个好主意)。

您的示例只有在您已经预先定义了 a 的情况下才能工作:

>>> def foo(a,t=([0]*len(a))):
... print t
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> a = [1, 2]
>>> def foo(a,t=([0]*len(a))):
... print t
...

关于python - Python 函数定义中的列表构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511457/

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