Passing a list of kwargs?
我可以将kwargs列表传递给简洁方法吗? 这就是我正在尝试做的事情:
1 2 3 4 5 | def method(**kwargs): #do something keywords = (keyword1 = 'foo', keyword2 = 'bar') method(keywords) |
是。 你这样做:
1 2 3 4 5 6 | def method(**kwargs): print kwargs keywords = {'keyword1': 'foo', 'keyword2': 'bar'} method(keyword1='foo', keyword2='bar') method(**keywords) |
在Python中运行它确认这些产生相同的结果:
1 2 | {'keyword2': 'bar', 'keyword1': 'foo'} {'keyword2': 'bar', 'keyword1': 'foo'} |
正如其他人所指出的,你可以通过传递一个词来做你想做的事。 有各种方法来构建一个字典。 保留您尝试的
1 | keywords = dict(keyword1 = 'foo', keyword2 = 'bar') |
注意
1 2 3 4 5 6 | >>> 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 >>> |
你的意思是一个字吗? 你当然可以:
1 2 3 4 5 | def method(**kwargs): #do something keywords = {keyword1: 'foo', keyword2: 'bar'} method(**keywords) |
所以当我来到这里时,我正在寻找一种方法在一个函数中传递几个** kwargs - 以后用于其他函数。 因为这不奇怪,不起作用:
1 2 | def func1(**f2_x, **f3_x): ... |
通过一些自己的"实验性"编码,我明显地知道如何做到这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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}) |
这按预期打印:
1 2 3 4 5 6 7 8 9 | --func1-- aaaa bbbb --func2-- 1 2 --func3-- 37 69 |