कोड वार्ता अधिक:लैम्बडा फ़ंक्शन पायथन में पैरामीटर को बंद नहीं करता है?
from pprint import pprint
li = []
for i in range(5):
li.append(lambda : pprint(i))
for k in li:
k()
उपज:
4 4 4 4 4
क्यों नहीं
0 1 2 3 4
??
धन्यवाद।
पीएस अगर मैं पूरा डेकोरेटर बारे में, यह उम्मीद के रूप में काम करता है: केवल बजाय i
देखें [यह प्रश्न] (http://stackoverflow.com/q/2295290/195823) और [इस प्रश्न का मेरा जवाब] (http://stackoverflow.com/questions/2295290/what-do-lambda- फ़ंक्शन-क्लोजर-कैप्चर-इन-पायथन/2295372 # 2295372) –
आप देख सकते हैं कि मूल लूप को फ़ंक्शन में ले जाकर चर को बंद कर रहा है, और उसके बाद फ़ंक्शन को 'k के लिए li: 'लाइन से पहले कॉल करना है, इसलिए कि 'i' मॉड्यूल स्तर के दायरे में मान्य नाम नहीं है। यह अभी भी काम करेगा (और एक ही परिणाम प्राप्त करें क्योंकि यह एक संदर्भ को बंद नहीं कर रहा है), जिसका अर्थ है कि नाम बंद है। – agf
आप सभी को धन्यवाद।मुझे लगता है कि http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture-in-python/2295368#2295368 न केवल समाधान बताता है बल्कि क्यों। मुझे लगता है कि मेरा प्रश्न http://stackoverflow.com/questions/2295290/what-do-lambda-function-closures-capture-in-python – Grissiom