在数组中按对象引用特定参数?

时间:2014-02-10 23:25:23

标签: python parameters expression keyword generalization

所以我真的不确定如何说出这个问题,或者我确定我可以直接说它。

我有一个如下功能:

def example(parameter1 = "", parameter2 = "", parameter3 =""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

我希望能够,比如说,调用它3次并且只传入一个参数,例如:

example(parameter1 = "Hello")
example(parameter2 = "Stack")
example(parameter3 = "Overflow")

但是在我的真实代码中,我需要对此进行大量概括,并且有更多的参数,所以我希望能够做到以下几点:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example(paramnames[i] = parameters[i])

在python中有什么方法可以实现这个目的吗?

4 个答案:

答案 0 :(得分:1)

您要找的是argument packing,并使用***来表示位置和命名参数:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for name, value in zip(paramnames, parameters):
    example(**{name: value})

def example(parameter1="", parameter2="", parameter3=""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

请记住,如果未传递参数,则它将是默认值。所以输出是:

Hello



Stack



Overflow

答案 1 :(得分:1)

使用dict**表示法:

parameters = {'parameter1': 'Hello',
              'parameter2': 'Stack', 
              'parameter3': 'Overflow'}

for k, v in parameters.items():
    example(**{k: v})

如果您需要保留订单,请使用OrderedDict

答案 2 :(得分:0)

为什么不使用这样的字典:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example({paramnames[i] : parameters[i]})

和:

def example(para_dict):
    for k,v in para_dict.items():
        print(v)

如果你想在deffrent代码上使用每个参数,你可以测试“k”

答案 3 :(得分:0)

有几种方法可以做到这一点。

最直接的方法可能是使用字典来保存参数,然后使用example(**param_dict)将它们全部传递给函数。

更“花哨”的方法是将functools.partial用于可调用对象,并指定一些参数。您可以执行类似example = partial(example, parameter1="hello")的操作来添加参数,然后在结尾处调用example()。如果参数来自许多不同的地方,并且您需要将函数与其参数保持一段时间,就像在回调中一样,这种方法可能很有用。