मुझे नहीं लगता कि आप वास्तव में लैम्बडास के बारे में पूछ रहे हैं, लेकिन इनलाइन फ़ंक्शन।
यह वास्तव में पाइथन की गंभीर रूप से कष्टप्रद सीमाओं में से एक है: आप किसी फ़ंक्शन को परिभाषित नहीं कर सकते (वास्तविक कार्य, केवल एक अभिव्यक्ति नहीं) इनलाइन; आपको इसे एक नाम देना होगा। यह बहुत निराशाजनक है, क्योंकि हर दूसरी आधुनिक स्क्रिप्टिंग भाषा यह करती है और यह अक्सर बाहर काम करने के लिए बहुत दर्दनाक होता है। यह भी निराशाजनक है क्योंकि मुझे लगता है कि पाइथन बाइटकोड इस छोटे से प्रतिनिधित्व कर सकता है - यह सिर्फ भाषा वाक्यविन्यास है जो नहीं कर सकता है।
जावास्क्रिप्ट:
responses = {
"resp1": {
"start": function() { ... },
"stop": function() { ... },
},
"resp2": {
"start": function() { ... },
"stop": function() { ... },
},
...
}
responses["resp1"]["start"]();
लुआ:
responses = {
resp1 = {
start = function() ... end;
end = function() ... end;
};
...
}
responses.resp1.start();
रूबी:
responses = {
"resp1" => {
"start" => lambda { },
"stop" => lambda { },
},
}
responses["resp1"]["start"].call
पायथन:
def resp1_start():
pass
def resp1_stop():
pass
responses = {
"resp1": {
"start": resp1_start,
"stop": resp1_stop,
},
}
responses["resp1"]["start"]()
ध्यान दें कि जावास्क्रिप्ट और लुआ में लैम्बडा नहीं हैं: उनके पास मौजूद होने का कोई कारण नहीं है, क्योंकि इनलाइन फ़ंक्शंस उन्हें अधिक प्राकृतिक और सामान्य तरीके से कवर करते हैं।
मैं शायद इसे सबसे ज्यादा परेशान दिन-दर-दिन पायथन सीमा के रूप में रेट करूंगा।
स्रोत
2010-04-16 17:20:53
लैम्बडास अभिव्यक्ति * द्वारा अभिव्यक्ति * हैं। –