我现在已经用了一段时间来破坏我的头脑。
鉴于此功能:
def foo(param1, param2, param3):
print 'param1 =', param1
print 'param2 =', param2
print 'param3 =', param3
可以在Python中做这样的事情吗?
string1 = 'param1'
string2 = 'param2'
string3 = 'param3'
foo(string1='val1', string2='val2', string3='val3') # Uber magic
或类似的东西?
params = {
'param1': 'val1',
'param2': 'val2',
'param3': 'val3'
}
foo(params) # Even ubener magic
所有魔法的结果应该等同于调用
foo(param1='val1', param2='val2', param3='val3')
顺便说一下,我对改变支持**kwargs
的功能不感兴趣。
提前致谢!
答案 0 :(得分:2)
>>> def foo(param1, param2, param3):
print param1, param2, param3
>>> foo(*range(3))
0 1 2
>>> foo(**dict(param1=1,param2=2,param3=3))
1 2 3
答案 1 :(得分:1)
params = {
'param1': 'val1',
'param2': 'val2',
'param3': 'val3'
}
foo(**params) # Even ubener magic
这被称为解包字典......
答案 2 :(得分:0)
正如@en_Knight指出的那样,这些可以做到
要么:
foo(param1='val1',param2='val2',param3='val3')
或:
foo(**params)
如果你只想指定一些变量,你可以给出函数默认变量(在这个确切的例子中不会那么有用):
def foo(param1='', param2='', param3=''):
然后您可以按任何顺序指定它们或省略其中一些例如。
foo(param3=2,param1=2)
但如果定义了一些变量而没有引用参数名称,则需要先将它们放在第一位:
foo(3,param=4) #param1 = 3, param2 = '', param3 = 4