2011-08-08 9 views
8

Jaki jest najbardziej pythonic sposób, aby ominąć następujący problem? Z interaktywnej powłoki:Pythonowy sposób przypisywania argumentów słów kluczowych za pomocą zmiennej jako słowa kluczowego?

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

na chwilę dostaję wokół niego z następujących czynności:

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

ale wydaje się dość niezdarny ...

(czy pyton 2.7+ lub 3.2 lub nowszym rozwiązania są ok)

Odpowiedz

4

W wielu przypadkach można po prostu użyć

f(kw) 

jako argumenty słów kluczowych nie muszą być określone jako słowa kluczowe, jeśli podasz wszystkie argumenty przed nimi.

Python 3 ma składnię dla keyword only arguments, ale to nie jest to, czym są domyślnie.

Albo, opierając się na odpowiedź użytkownika @ zeekay,

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

jeśli nie chcesz przechowywać kW jako dict, na przykład, jeśli jesteś również używając go jako klucz w słowniku odnośnika gdzie indziej.

Powiązane problemy