Python:处理具有长参数列表的函数的最佳方法?

2024-09-19 23:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

关于如何将一长串参数传递到函数中,我已经找到了各种详细的解释,但我仍然有点怀疑这是否是正确的方法。在

换句话说,我怀疑我做错了,但我不知道怎么做才对。在

问题:我有一个(不是很长的)递归函数,它使用了相当多的变量,并且至少需要修改其中一些内容。在

我的结局是这样的:

def myFunction(alpha, beta, gamma, zeta, alphaList, betaList, gammaList, zetaList):
    <some operations>
    myFunction(alpha, beta, modGamma, zeta, modAlphaList, betaList, gammaList, modZetaList)

…我想看看我对原始变量所做的更改(在C语言中,我只传递一个引用,但我听说在Python中它总是一个副本?)。在

对不起,如果没有,我不知道如何措辞这个问题,以便我可以找到相关的答案。在


Tags: 方法函数alpha内容defbetagammazeta
3条回答

例如,这通常用于matplotlib。它们使用***传递一长串参数,如:

def function(*args, **kwargs):
    do something

调用函数:

^{pr2}$

这里1,2,3,4,5将转到args,而{}将作为字典转到{}。这样他们就可以像:

args = [1,2,3,4,5]
kwargs = {a:1, b:2, c:3}

你可以用你想要的方式来对待他们。在

您可以将所有参数打包到一个类中,如下所示:

class FooParameters:
    alpha = 1.0
    beta = 1.0
    gamma = 1.0
    zeta = 1.0
    alphaList = []
    betaList = []
    gammaList = []
    zetaList = []

然后您的函数接受一个参数实例:

^{pr2}$

呼叫方式:

testParams = FooParameters()
testParams.gamma = 2.3
myFunction(testParams)
print params.zetaList

因为params实例是由reference传递的,所以函数中的更改将被保留。在

我不知道你从哪里得到的想法是Python在传递到函数时复制值。那不是真的。在

相反:函数中的每个参数都是引用原始对象的附加名称。如果您以某种方式更改该对象的值(例如,如果它是一个列表,并且您更改了它的一个成员),则原始对象也将看到该更改。但是如果你把名字重新绑定到别的东西上,比如说通过做alpha = my_completely_new_value,那么原来的名字就保持不变了。在

相关问题 更多 >