gpt4 book ai didi

python - 在同一调用中引用函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:44 24 4
gpt4 key购买 nike

我在 Python 中有这样一个函数调用:

foo(["A", "B", "X", "Y", "Z"], SomeClass("m", ["A", "B", "X", "Y", "Z"]), SomeClass("n",["A", "B", "X", "Y", "Z"]))

一般来说,foo 可以有任意数量的参数,所以可以传递很多 SomeClass 对象,但是在调用构造函数时,你总是必须传递与 foo 的第一个参数相同的东西,What I'我想要的是这个:

foo(["A", "B", "X", "Y", "Z"], SomeClass("m", arg1), SomeClass("n", arg1))

所以代码更短,更易读。为了“引用”传递给 foo 的第一个参数,我应该用什么代替 arg1?

最佳答案

为什么不使用变量:

arg1 = ["A", "B", "X", "Y", "Z"]
foo(arg1, SomeClass("m", arg1), SomeClass("n", arg1))

注意:列表通过引用传递,因此如果您在 foo 中修改它或在初始化 SomeClass 时,您可能会得到不可预知的结果以避免这种情况你必须通过列表的副本,查看更多信息How to clone or copy a list?问题。

要解决引用问题,您必须在将列表传递给 SomeClassfoo 之前复制列表,这可以用 copy.copy() 来完成, copy.deepcopy()list slicing :

from copy import copy, deepcopy


foo(copy(arg1), SomeClass("m", copy(arg1)), SomeClass("n", copy(arg1)))

foo(arg1[:], SomeClass("m", arg1[:]), SomeClass("n", arg1[:]))
foo(deepcopy(arg1), SomeClass("m", deepcopy(arg1)), SomeClass("n", deepcopy(arg1)))

重要的时刻是列表切片 ([:]) 和 copy.copy() 同时返回列表的浅拷贝 copy.deepcopy() 返回深拷贝。查看更多信息 What exactly is the difference between shallow copy, deepcopy and normal assignment operation?

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

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