88 votes

En passant une liste de kwargs?

Puis-je passer d'une liste de kwargs à une méthode pour des raisons de concision? C'est ce que j'essaie de faire:

def method(**kwargs):
    #do something

keywords = (keyword1 = 'foo', keyword2 = 'bar')
method(keywords)

152voto

Peter Points 38320

Oui. Vous faites comme ceci:

def method(**kwargs):
  print kwargs

keywords = {'keyword1': 'foo', 'keyword2': 'bar'}
method(keyword1='foo', keyword2='bar')
method(**keywords)

L'exécution de ce en Python confirme que ceux-ci produisent des résultats identiques:

{'keyword2': 'bar', 'keyword1': 'foo'}
{'keyword2': 'bar', 'keyword1': 'foo'}

10voto

Ned Deily Points 40248

Comme d'autres l'ont souligné, vous pouvez faire ce que vous voulez par le passage d'un dict. Il existe différentes façons de construire un dict. Celui qui préserve l' keyword=value style que vous avez tenté d'utiliser le dict intégré:

keywords = dict(keyword1 = 'foo', keyword2 = 'bar')

Remarque la polyvalence de l' dict; l'ensemble de ces produisent le même résultat:

>>> 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
>>>

4voto

David Z Points 49476

Voulez-vous dire un dict? Bien sûr, vous pouvez:

def method(**kwargs):
    #do something

keywords = {keyword1: 'foo', keyword2: 'bar'}
method(**keywords)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X