通过一个kwargs列表?

jwa*_*nga 86 python kwargs

我可以将kwargs列表传递给简洁方法吗?这就是我正在尝试做的事情:

def method(**kwargs):
    #do something

keywords = (keyword1 = 'foo', keyword2 = 'bar')
method(keywords)
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 149

是.你这样做:

def method(**kwargs):
  print kwargs

keywords = {'keyword1': 'foo', 'keyword2': 'bar'}
method(keyword1='foo', keyword2='bar')
method(**keywords)
Run Code Online (Sandbox Code Playgroud)

在Python中运行它确认这些产生相同的结果:

{'keyword2': 'bar', 'keyword1': 'foo'}
{'keyword2': 'bar', 'keyword1': 'foo'}
Run Code Online (Sandbox Code Playgroud)

  • 或者:keywords = dict(keyword1 ='foo',keyword2 ='bar') (10认同)
  • 我从没说过谢谢你。谢谢! (3认同)
  • `**` 解包运算符可用于将 kwargs 从一个函数传递到另一个函数的 kwargs。考虑这段代码:(注释中似乎不允许换行)`def a(**kw): print(kw)`和`def b(**kw): a(kw)`。这段代码会产生错误,因为 kwargs 实际上是一个字典,并将被解释为 `dict` 类型的常规参数。这就是为什么将 `def b(**kw): a(kw)` 更改为 `def b(**kw): a(**kw)` 将解压缩 `kw` 并解决错误的原因。 (2认同)

Ned*_*ily 10

正如其他人所指出的,你可以通过传递一个词来做你想做的事.有各种方法来构建一个字典.保留keyword=value您尝试的样式的是使用内置的dict:

keywords = dict(keyword1 = 'foo', keyword2 = 'bar')
Run Code Online (Sandbox Code Playgroud)

注意多功能性dict; 所有这些产生相同的结果:

>>> 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
>>> 
Run Code Online (Sandbox Code Playgroud)


Dav*_*d Z 7

你的意思是字典吗?你当然可以:

def method(**kwargs):
    #do something

keywords = {keyword1: 'foo', keyword2: 'bar'}
method(**keywords)
Run Code Online (Sandbox Code Playgroud)