函数参数中的动态变量

时间:2017-07-18 13:45:29

标签: python

让我们说我有这样的功能:

def helloWorld(**args):
    for arg in args:
        print(args[arg])

调用此功能很简单:

helloWorld(myMsg = 'hello, world')
helloWorld(anotherMessages = 'no, no this is hard')

但困难的是我想从列表或其他地方的变量中动态命名args。我想要从列表中传递myMsg和anotherMessages(例如,我无能为力的困难部分,我需要帮助的是如何将字符串转换为变量作为函数的输入)。

list_of_variable_names = ['myMsg','anotherMessages']
for name in list_of_variable_names:
    helloWorld(name = 'ooops, this is not easy, how do I pass a variable name that is stored as a string in a list? No idea! help!')

2 个答案:

答案 0 :(得分:3)

您可以使用变量创建一个dict,然后在将其传递给函数时解压缩:

list_of_variable_names = ['myMsg','anotherMessages']
for name in list_of_variable_names:
    helloWorld(**{name: '...'})

答案 1 :(得分:3)

** syntax是一个字典解包。 因此,在您的函数中,args(通常为kwargs)是一个字典。

因此,您需要将解压缩字典传递给它,这就是调用f(a=1, b=2)时所做的事情。

例如:

kwargs = {'myMsg': "hello, world", 'anotherMessages': "no, no this is hard"}
helloWorld(**kwargs)

然后,您将获得kwargs字典。

def f(**kwargs):
    for k, v in kwargs.items():
        print(k, v)

>>> kwargs = {'a': 1, 'b': 2}
>>> f(**kwargs)
a 1
b 2

如果你想这样做,你可以为每个名字调用一次该函数,方法是动态创建一个字典并将其解压缩,如Moses suggested

def f(**kwargs):
    print("call to f")
    for k, v in kwargs.items():
        print(k, v)

>>> for k, v in {'a': 1, 'b': 2}:
...     kwargs = {k: v}
...     f(**kwargs)
...
call to f
a 1
call to f
b 2