使用string或dict构建Python函数参数

时间:2016-04-06 21:07:43

标签: python

我现在已经用了一段时间来破坏我的头脑。

鉴于此功能:

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的功能不感兴趣。

提前致谢!

3 个答案:

答案 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