sets
को लैम्ब्डा असाइन किया जा रहा है जिसे वास्तव में इनपुट स्वीकार नहीं किया जाता है, जिसे आप जिस तरह से बुलाते हैं उससे देखते हैं। सामान्य रूप से लैम्ब्डा सामान्य कार्यों की तरह व्यवहार करते हैं, और इसलिए g
या sets
जैसे चरों को असाइन किया जा सकता है। sets
की परिभाषा किसी स्पष्ट कारण के लिए ब्रांड्स के एक अतिरिक्त सेट से घिरा हुआ है। आप उन बाहरी माता-पिता को अनदेखा कर सकते हैं।
लैम्बडास में समान प्रकार के स्थितित्मक, कीवर्ड और डिफ़ॉल्ट तर्क एक सामान्य कार्य कर सकते हैं। लैम्ब्डा sets
में split
नामक एक डिफ़ॉल्ट पैरामीटर है। यह सुनिश्चित करने के लिए एक आम मुहावरे है कि लूप के प्रत्येक पुनरावृत्ति में sets
को split
का मान मिलता है जो सभी मामलों में अंतिम पुनरावृत्ति से केवल उस पुनरावृत्ति के अनुरूप होता है।
डिफ़ॉल्ट पैरामीटर के बिना, split
का नाम नाम के समय नाम के आधार पर लैम्ब्डा के भीतर मूल्यांकन किया जाएगा। एक बार लूप पूरा हो जाने पर, बाहरी फ़ंक्शन के नामस्थान में split
लूप के लिए केवल अंतिम मूल्य होगा।
फ़ंक्शन ऑब्जेक्ट बनने पर डिफ़ॉल्ट मानकों का तुरंत मूल्यांकन किया जाता है। इसका अर्थ यह है कि डिफ़ॉल्ट पैरामीटर split
का मान उस लूप के पुनरावृत्ति में होगा जहां यह बनाता है।
आपका उदाहरण थोड़ा भ्रामक है क्योंकि यह पिछले एक के अलावा sets
के सभी वास्तविक मानों को छोड़ देता है, जो लम्बाडा को डिफ़ॉल्ट पैरामीटर बना देता है। यहां एक उदाहरण दिया गया है जो बताता है कि क्या होता है यदि आप सभी लैम्ब्स रखते हैं। सबसे पहले डिफ़ॉल्ट पैरामीटर के साथ:
sets = []
for split in ['train', 'test']:
sets.append(lambda split=split: split)
print([fn() for fn in sets])
मैं lambdas छोटा कर दिया है बस चित्रांकन के लिए अपने इनपुट पैरामीटर वापस जाने के लिए। यह उदाहरण अपेक्षित के रूप में ['train', 'test']
प्रिंट करेगा।
आप डिफ़ॉल्ट पैरामीटर के बिना एक ही बात करते हैं, उत्पादन के बजाय ['test', 'test']
हो जाएगा:
sets = []
for split in ['train', 'test']:
sets.append(lambda: split)
print([fn() for fn in sets])
इसका कारण यह है 'test'
split
का मूल्य है, जब सभी lambdas का मूल्यांकन करने के लिए है।
स्रोत
2017-09-23 04:47:04
क्या आप वाकई कोड सही हैं? हर पुनरावृत्ति 'सेट' को पुन: असाइन करना वास्तव में अजीब है। –
मुझे लगता है कि यह एक न्यूनतम उदाहरण बनाने के लिए ओपी का प्रयास है। यह कोड खुद ही प्रश्न के अनुसार नहीं है। –