传递一个kwargs的列表?
为了简洁起见,我可以将一个kwargs列表传递给一个方法吗? 这是我正在尝试做的事情:
def method(**kwargs): #do something keywords = (keyword1 = 'foo', keyword2 = 'bar') method(keywords)
是。 你这样做:
def method(**kwargs): print kwargs keywords = {'keyword1': 'foo', 'keyword2': 'bar'} method(keyword1='foo', keyword2='bar') method(**keywords)
在Python中运行这个确认这些产生相同的结果:
{'keyword2': 'bar', 'keyword1': 'foo'} {'keyword2': 'bar', 'keyword1': 'foo'}
正如其他人所指出的,你可以通过传达一个字典来做你想做的事情。 有不同的方法来构build一个字典。 一个保留你尝试的keyword=value
风格是使用内置的字典 :
keywords = dict(keyword1 = 'foo', keyword2 = 'bar')
注意dict
的多function性; 所有这些产生相同的结果:
>>> kw1 = dict(keyword1 = 'foo', keyword2 = 'bar') >>> kw2 = dict({'keyword1':'foo', 'keyword2':'bar'}) >>> kw3 = dict([['keyword1', 'foo'], ['keyword2', 'bar']]) >>> kw4 = dict(zip(('keyword1', 'keyword2'), ('foo', 'bar'))) >>> assert kw1 == kw2 == kw3 == kw4 >>>
所以当我来到这里的时候,我正在寻找一种方法来在一个函数中传递几个** kwargs,以便以后用于更多的function。 因为这并不奇怪,不起作用:
def func1(**f2_x, **f3_x): ...
随着一些自己的“实验”编码,我明显地明白了如何做到这一点:
def func3(f3_a, f3_b): print "--func3--" print f3_a print f3_b def func2(f2_a, f2_b): print "--func2--" print f2_a print f2_b def func1(f1_a, f1_b, f2_x={},f3_x={}): print "--func1--" print f1_a print f1_b func2(**f2_x) func3(**f3_x) func1('aaaa', 'bbbb', {'f2_a':1, 'f2_b':2}, {'f3_a':37, 'f3_b':69})
按预期打印:
--func1-- aaaa bbbb --func2-- 1 2 --func3-- 37 69
你的意思是字典吗? 你当然可以:
def method(**kwargs): #do something keywords = {keyword1: 'foo', keyword2: 'bar'} method(**keywords)