让我们说我有这样的功能:
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!')
答案 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