所以我真的不确定如何说出这个问题,或者我确定我可以直接说它。
我有一个如下功能:
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中有什么方法可以实现这个目的吗?
答案 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()
。如果参数来自许多不同的地方,并且您需要将函数与其参数保持一段时间,就像在回调中一样,这种方法可能很有用。