2011-08-08 12 views
8

en pythonic yolu, aşağıdaki sorunlardan kurtulmak için nedir? Etkileşimli kabuk Gönderen:Anahtar kelime argümanlarını anahtar kelime olarak bir değişken kullanarak pythonic olarak paylaşmanın çoğu yolu?

>>> def f(a=False): 
...  if a: 
...   return 'a was True' 
...  return 'a was False' 
... 
>>> f(a=True) 
'a was True' 
>>> kw = 'a' 
>>> val = True 
>>> f(kw=val) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: f() got an unexpected keyword argument 'kw' 

Birlikte etrafında alıyorum an için aşağıdaki:

>>> exec 'result = f(%s=val)' % kw 
>>> result 
'a was True' 

ama oldukça hantal görünüyor ...

(Ya piton 2.7+

veya 3.2+ çözümler

cevap

4

sadece onlara önce tüm argümanları belirtirseniz

f(kw) 

gibi anahtar kelime argümanlar, anahtar kelimeler olarak belirtilmesi gerekmez kullanabilirsiniz.

Python 3'ün keyword only arguments için bir sözdizimi vardır, ancak bunlar varsayılan olarak değillerdir. @ Zeekay cevabı üzerine inşa

Veya,

kw = 'a' 
f(**{kw: True}) 

sizin de başka yerde bir sözlük arama bir anahtar olarak kullandığınız eğer örneğin bir dict kw saklamak istemiyorsanız.