gpt4 book ai didi

python - 在 Python 函数中使用参数

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:50 24 4
gpt4 key购买 nike

我知道 Python 中的可变参数和不可变参数,哪个是哪个,但这是我遇到的一个奇怪的问题,涉及可变参数。简化版如下:

def fun1a(tmp):
tmp.append(3)
tmp.append(2)
tmp.append(1)
return True

def fun1(a):
b = fun1a(a)
print a #prints [3,2,1]
return b

def fun2a():
tmp = []
tmp.append(3)
tmp.append(2)
tmp.append(1)
return [True, tmp]

def fun2(a):
[b, a] = fun2a()
print a #prints [3,2,1]
return b

def main():
a=[]
if fun1(a):
print a #prints [3,2,1]
if fun2(b):
print b #prints garbage, e.g. (0,1)

如您所见,唯一的区别是 fun2 将传入的参数指向引用在 fun2a 中创建的列表,而 fun1 只是附加到在 main 中创建的列表。最后,fun1 返回正确的结果,而 fun2 返回随机垃圾而不是我期望的结果。这里有什么问题?

谢谢

最佳答案

这与其说是一个可变/不可变问题,不如说是一个范围问题。

“b”仅存在于 fun1 和 fun2 体中。它不存在于主要或全局范围内(至少是有意的)

--编辑--

>>> def fun1(b):
... b = b + 1
... return b
...
>>> def fun2(a):
... b = 1
... return b
...
>>> fun1(5)
6
>>> fun2(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

(来 self 在终端的翻译)

我猜你的“b”是在别处初始化的。其他函数中发生的事情对此没有影响。

这是我运行你的确切代码:

>>> main()
[3, 2, 1]
[3, 2, 1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in main
NameError: global name 'b' is not defined
>>> b = 'whatever'
>>> main()
[3, 2, 1]
[3, 2, 1]
[3, 2, 1]
whatever

关于python - 在 Python 函数中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175585/

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