2011-08-08 20 views
8

निम्नलिखित समस्या के आसपास पाने के लिए सबसे अधिक पाइथोनिक तरीका क्या है? इंटरैक्टिव खोल से:एक चर के रूप में एक चर का उपयोग कर कीवर्ड तर्क असाइन करने का सबसे पायदान तरीका?

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

पल मैं इसे चारों ओर से हो रही है के लिए निम्नलिखित:

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

लेकिन यह काफी अनाड़ी लगता है ...

(या तो अजगर 2.7+ या 3.2+ समाधान ठीक हैं)

उत्तर

4

कई परिस्थितियों में आप सिर्फ का उपयोग

f(kw) 

के रूप में कीवर्ड तर्क अगर आप उन्हें पहले सभी तर्क निर्दिष्ट करते हैं, कीवर्ड के रूप में निर्दिष्ट करने की जरूरत नहीं है सकते हैं।

पायथन 3 में keyword only arguments के लिए एक वाक्यविन्यास है, लेकिन यह डिफ़ॉल्ट रूप से नहीं है।

या, @ zeekay के जवाब पर निर्माण,

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

आप kw अगर आप भी कहीं एक शब्दकोश अनुसंधान में एक महत्वपूर्ण के रूप में यह प्रयोग कर रहे हैं, उदाहरण के लिए, एक dict के रूप में स्टोर करने के लिए नहीं करना चाहते हैं।