मान लीजिए कि मेरे पास get_data
फ़ंक्शन है जो कुछ कीवर्ड तर्क लेता है। वहाँ किसी तरह मैं इसफ़ंक्शन कॉलिंग और परिभाषा दोनों में ** kwargs का उपयोग करें
def get_data(arg1, **kwargs):
print arg1, arg2, arg3, arg4
arg1 = 1
data['arg2'] = 2
data['arg3'] = 3
data['arg4'] = 4
get_data(arg1, **data)
कर सकते हैं तो विचार दोनों समारोह बुला और समारोह परिभाषा तर्क नाम लिखकर से बचने के लिए है। मैं तर्क के रूप में एक शब्दकोश और शब्दकोश की कुंजी के साथ समारोह समारोह के स्थानीय चर फोन हो जाते हैं और उनके मूल्यों को महत्व देता शब्दकोश
मैं ऊपर की कोशिश की और त्रुटि global name 'arg2' is not defined
कह मिल गया है। मैं समझता हूं कि वांछित व्यवहार प्राप्त करने के लिए get_data
की परिभाषा में मैं locals()
को बदल सकता हूं।
तो मेरी कोड इस
def get_data(arg1, kwargs):
locals().update(kwargs)
print arg1, arg2, arg3, arg4
arg1 = 1
data['arg2'] = 2
data['arg3'] = 3
data['arg4'] = 4
get_data(arg1, data)
की तरह लग रहे थे और यह जाहिर भी काम नहीं होता। locals()
का उपयोग किये बिना मैं व्यवहार को भी प्राप्त नहीं कर सकता?
मैं सुझाव है कि आप इस सवाल का http://stackoverflow.com/questions/3394835/args-and-kwargs –
को संशोधित नहीं है की जाँच 'locals' , यह हर समय काम करने की भी गारंटी नहीं देता है: http://docs.python.org/2/library/functions.html#locals – jamylak
.. आप ऐसा क्यों करेंगे? अगर आप arg2, arg3, arg4 हमेशा जानते हैं पारित होने जा रहा है, तो आपको उन्हें व्यक्तिगत तर्क के रूप में निर्दिष्ट करना चाहिए। यदि आप नहीं करते हैं, तो भले ही आपके पास वांछित व्यवहार हो, भले ही आपने संदर्भित किया हो, 'arg4' कहें जब' डेटा 'ने' arg4' को परिभाषित नहीं किया था, यह एक नेमररर उठाएगा। यह किसी भी डेटा को प्रिंट नहीं करेगा, यह सिर्फ एक त्रुटि उठाएगा। – kampu