मैं अजगर 3.5.1 में निम्न कोड की कोशिश की देता है:लैम्ब्डा कार्यों के साथ शब्दकोश समझ गलत परिणाम
>>> f = {x: (lambda y: x) for x in range(10)}
>>> f[5](3)
9
यह स्पष्ट है कि इस 5
लौटना चाहिए। मुझे समझ में नहीं आता कि दूसरा मूल्य कहां से आता है, और मैं कुछ भी नहीं ढूंढ पाया।
ऐसा लगता है कि यह संदर्भ से संबंधित कुछ है - यह हमेशा f[9]
का उत्तर देता है, जो अंतिम कार्य सौंपा गया है।
यहां क्या त्रुटि है, और यह कैसे किया जाना चाहिए ताकि यह ठीक से काम करे?
एक वैकल्पिक आशुलिपि 'f किया जाएगा = {x: (लैम्ब्डा y, x = x: एक्स) रेंज में एक्स के लिए (10)}', क्योंकि समारोह डिफ़ॉल्ट तर्क परिभाषा समय में बंधे हुए हैं, इसलिए वे 'x' के _value_ को बांधेंगे, न कि _name_' x'। – ShadowRanger
यह एक बहुत बेवकूफ सवाल की तरह लग सकता है (मैं लैम्ब्डा से बहुत परिचित नहीं हूं), लेकिन make_func (x) कैसे काम करता है? मैं कल्पना कर सकता हूं कि एफ [5] (3) का अर्थ है -> एफ = {5: make_func (5)}। तो यह कैसे है कि make_func (5) (3) 5 के बराबर है? – Adib
शब्दकोश समझ में कार्यों की मानों के लिए इंट्स की एक कुंजी कुंजी बनाता है। एफ [5] 5 द्वारा की गई कुंजीपटल में मान देता है जो फ़ंक्शन लैम्ब्डा वाई: x होता है। ध्यान दें कि लैम्ब्डा जो कुछ भी पारित होता है उसे अनदेखा करता है और हमेशा x देता है। यही कारण है कि लैम्ब्डा या तो 5 या 9 लौटाएगा (ऊपर वर्णित मुद्दे के कारण)। – gnicholas