1

所以我真的不知道如何表达这个问题,或者我确定我可以谷歌搜索它。

我有一个功能,例如:

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

4 回答 4

1

What you're looking for is called argument packing, and uses * or ** to denote positional and named arguments:

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)

Keep in mind that if an argument isn't passed, it'll be the default. So the output is:

Hello



Stack



Overflow
于 2014-02-10T23:28:33.473 回答
1

使用 adict**符号:

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

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

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

于 2014-02-10T23:29:35.720 回答
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)

如果您想在不同的代码上使用每个参数,您可以在“k”上进行测试

于 2014-02-10T23:30:54.810 回答
0

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

最直接的方法可能是使用字典来保存参数,然后再使用example(**param_dict).

一种更“花哨”的方法是使用functools.partial预先指定一些参数的可调用对象。你会做一些类似example = partial(example, parameter1="hello")添加参数的事情,然后example()在最后调用。如果参数来自许多不同的地方,并且您需要将函数及其参数保留一段时间,这种方法可能很有用,比如在回调中。

于 2014-02-10T23:31:20.017 回答