函数采用kwargs是一个dict,其键是动态生成的字符串

Mac*_*eus 2 python function kwargs

例:

def foo(v0 = 'a', v1 = 'b', v2 = 'c'):
    print(v0, v1, v2)

for i in range(0, 3):
    target = "v" + str(i)
    foo(target = 'z')
Run Code Online (Sandbox Code Playgroud)

我希望以下输出:

z b c
a z c
a b z
Run Code Online (Sandbox Code Playgroud)

但是,就目前而言,上面的代码提出了以下内容TypeError:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-7b3fb4086218> in <module>()
      4 for i in range(0, 3):
      5     target = "v" + str(i)
----> 6     foo(target = 'z')

TypeError: foo() got an unexpected keyword argument 'target'
Run Code Online (Sandbox Code Playgroud)

我如何动态地将'target'设置为'v0','v1'等?

这只是我需要做的一个例子.对于我的情况,是与SQLAlchemy一起使用,以便能够动态选择我将使用的表.我不能用if.

The*_*Cat 7

你应该使用带有关键字参数expand(**)的dict :

for i in range(0, 3):
    target = "v" + str(i)
    kwarg = {target: 'z'}
    foo(**kwarg)
Run Code Online (Sandbox Code Playgroud)

或者更简单:

for i in range(0, 3):
    foo(**{"v%s" % i: 'z'})
Run Code Online (Sandbox Code Playgroud)