2016-02-04 8 views
19

मेरे पास एक फ़ंक्शन परिभाषा है और मैं कीवर्ड तर्क पास कर रहा हूं। मैं कीवर्ड तर्क के समान नाम के साथ एक शब्दकोश को वापस कैसे प्राप्त करूं?पायथन कीवर्ड तर्क अनपैक और शब्दकोश

मैन्युअल मैं कर सकते हैं:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None): 
    return { 
     'first_name': first_name, 
     'last_name': last_name, 
     'birthday': birthday, 
     'gender': gender 
    } 

लेकिन मैं ऐसा नहीं करना चाहता। क्या कोई तरीका है कि मैं इस काम को वास्तव में लिखने के बिना कर सकता हूं?

def generate_student_dict(self, first_name=None, last_name=None, birthday=None, gender=None): 
    return # Packed value from keyword argument. 
+0

आप ऐसा क्यों करना चाहते हैं? –

+0

शुरुआत में मैं इस वापसी के आदेश को Django के मॉडल बनाने विधि को पास करना चाहता था। @PadraicCunningham –

+0

बस 'dict' –

उत्तर

13

में कीवर्ड तर्क जाओ कि जिस तरह से उपयुक्त आप के लिए, kwargs (Understanding kwargs in Python देखें) का उपयोग नीचे दिए कोड स्निपेट में के रूप में है, तो:

def generate_student_dict(self, **kwargs):    
    return kwargs 

अन्यथा, आप कर सकते हैं कार्य शुरू होने पर built-in locals() के साथ पैराम की एक प्रति बनाएं और वापसी प्रतिलिपि बनाएँ:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None): 
    # It's important to copy locals in first line of code (see @MuhammadTahir comment). 
    args_passed = locals().copy() 
    # some code 
    return args_passed 

generate_student_dict() 
+1

स्थानीय() का उपयोग केवल तभी काम करेगा जब विधि के शरीर में कोई चर परिभाषित नहीं किया गया है :) –

+0

@MuhammadTahir आपके सुधार के लिए धन्यवाद, मैंने जवाब अपडेट किया है –

3

**kwargs

def generate_student_dict(self, **kwargs): 
    # use it like 
    # kwargs.get('first_name') 
    # kwargs.get('last_name') 
    # kwargs.get('birthday') 
    # kwargs.get('gender') 
    return kwargs 
7

आप **kwargs पारित करने के लिए नहीं करना चाहते हैं, तो आप बस locals लौट सकते हैं:

def generate_student_dict(first_name=None, last_name=None, 
          birthday=None, gender=None): 
    return locals() 

ध्यान दें कि आप परिणाम से self दूर करने के लिए यदि आप एक तर्क के रूप में यह पारित करना चाहते हैं।

1

आप locals() फ़ंक्शन का उपयोग कर सकते हैं। locals() अद्यतन और वर्तमान स्थानीय प्रतीक तालिका का प्रतिनिधित्व करने वाला एक शब्दकोश देता है। नि: शुल्क चर locals() द्वारा लौटाए जाते हैं जब इसे फ़ंक्शन ब्लॉक में कहा जाता है, लेकिन वर्ग ब्लॉक में नहीं।

संबंधित मुद्दे