इस उदाहरण पर विचारलैम्ब्डा
def dump(value):
print value
items = []
for i in range(0, 2):
items.append(lambda: dump(i))
for item in items:
item()
उत्पादन:
1
1
मैं कैसे प्राप्त कर सकते हैं:
0
1
इस उदाहरण पर विचारलैम्ब्डा
def dump(value):
print value
items = []
for i in range(0, 2):
items.append(lambda: dump(i))
for item in items:
item()
उत्पादन:
1
1
मैं कैसे प्राप्त कर सकते हैं:
0
1
आप पर कोई डिफ़ॉल्ट मान के साथ एक पैरामीटर का उपयोग कर सकते हैं लैम्ब्डा:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
यह काम करता है क्योंकि फ़ंक्शन परिभाषित होने पर डिफ़ॉल्ट मान का मूल्यांकन किया जाता है, जब इसे कॉल नहीं किया जाता है।
आप उपयोग कर सकते हैं:
for i in range(0, 2):
items.append(lambda i=i: dump(i))
i
यह काम करता है क्योंकि डिफ़ॉल्ट पैरामीटर मान समारोह निर्माण समय पर मूल्यांकन किया जाता है के वर्तमान मूल्य पर कब्जा करने, और i
बाहरी चर, लेकिन कार्य नहीं है पैरामीटर जिसमें वह मान होगा जो आप डिफ़ॉल्ट रूप से चाहते हैं।
इस answer में एक और विस्तृत स्पष्टीकरण मिल सकता है।
आउटपुट मूल्य फ़ंक्शन के मूल्यांकन पर मेरा मूल्य है, न कि इसकी घोषणा पर। यही कारण है कि आपको वांछित परिणाम नहीं मिलते हैं।
पूर्णता के लिए, आप भी कर सकते हैं:
for i in range(0, 2):
items.append((lambda i: lambda: dump(i))(i))
मुझे लगता है कि यह उत्तर कम से कम हैकी है, भले ही यह डिफ़ॉल्ट मान उत्तर से अधिक वर्बोज़ है। – max
आदमी, आप स्मार्ट हैं। यह उदाहरण था लेकिन आपको कामकाज मिला, बिंदु यह था कि लैम्बडा परिभाषा पर उस संदर्भ को कैसे निकाला जाए। क्या ऐसा करने का कोई तरीका है? – bradojevic