接受 kwargs 的函数,它是一个 dict,其键是动态生成的字符串
Function taking kwargs which are a dict whose keys are dynamically-generated strings
示例:
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')
我希望输出如下:
z b c
a z c
a b z
但是,就目前而言,上面的代码引发了以下问题 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'
如何将 'target' 动态设置为 'v0'、'v1' 等?
这只是我需要做的一个例子。对于我的情况,是与 SQLAlchemy 一起使用,以便能够动态选择我将使用的 table。我不能使用 if
.
您应该使用带有关键字参数扩展的字典 (**
):
for i in range(0, 3):
target = "v" + str(i)
kwarg = {target: 'z'}
foo(**kwarg)
或者更简单地说:
for i in range(0, 3):
foo(**{"v%s" % i: 'z'})
您可以通过使用 **
运算符解压缩字典的项目来为函数分配关键字参数。由于字典很容易支持字符串作为键,因此可以很容易地分配给动态函数参数:
for i in range(0, 3):
foo(**{'v{}'.format(i): 'z'})
示例:
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')
我希望输出如下:
z b c
a z c
a b z
但是,就目前而言,上面的代码引发了以下问题 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'
如何将 'target' 动态设置为 'v0'、'v1' 等?
这只是我需要做的一个例子。对于我的情况,是与 SQLAlchemy 一起使用,以便能够动态选择我将使用的 table。我不能使用 if
.
您应该使用带有关键字参数扩展的字典 (**
):
for i in range(0, 3):
target = "v" + str(i)
kwarg = {target: 'z'}
foo(**kwarg)
或者更简单地说:
for i in range(0, 3):
foo(**{"v%s" % i: 'z'})
您可以通过使用 **
运算符解压缩字典的项目来为函数分配关键字参数。由于字典很容易支持字符串作为键,因此可以很容易地分配给动态函数参数:
for i in range(0, 3):
foo(**{'v{}'.format(i): 'z'})