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

Sta*_*tic 5 python python-2.7

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

换句话说,我怀疑我做错了,但我不知道如何做

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

我最终得到的是这样的:

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

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

对不起,如果菜鸟,我不知道如何表达这个问题,所以我可以找到相关的答案。

gav*_*inb 10

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

class FooParameters:
    alpha = 1.0
    beta = 1.0
    gamma = 1.0
    zeta = 1.0
    alphaList = []
    betaList = []
    gammaList = []
    zetaList = []
Run Code Online (Sandbox Code Playgroud)

然后您的函数采用单个参数实例:

def myFunction(params):
    omega = params.alpha * params.beta + exp(params.gamma)
    # more magic...
Run Code Online (Sandbox Code Playgroud)

像这样调用:

testParams = FooParameters()
testParams.gamma = 2.3
myFunction(testParams)
print params.zetaList
Run Code Online (Sandbox Code Playgroud)

由于 params 实例是通过引用传递的,因此保留了函数中的更改。


Sau*_*tro 7

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

def function(*args, **kwargs):
    do something
Run Code Online (Sandbox Code Playgroud)

调用函数:

function(1,2,3,4,5, a=1, b=2, b=3)
Run Code Online (Sandbox Code Playgroud)

Here 1,2,3,4,5will go toargsa=1, b=2, c=3will go to kwargs,作为字典。以便他们到达您的功能,例如:

args = [1,2,3,4,5]
kwargs = {a:1, b:2, c:3}
Run Code Online (Sandbox Code Playgroud)

你可以按照你想要的方式对待他们。