यह पायथन में गोल्फ के लिए एक टिप्स सवाल है।
पायथन गोल्फिंग में, एक फंक्शन को लैम्बडा के रूप में परिभाषित करने के लिए प्रस्तुत किया जाना आम है। उदाहरण के लिए,
f=lambda x:0**x or x*f(x-1)
भाज्य की गणना करता हैx की ।
मेमने के प्रारूप के दो बड़े फायदे हैं :
- की बॉयलरप्लेट
f=lambda x:...
याlambda x:...
तुलना में कम हैdef f(x):...return...
याx=input()...print...
- थोड़ा बाइट ओवरहेड के साथ लूप करने के लिए एक पुनरावर्ती कॉल का उपयोग किया जा सकता है।
हालाँकि, लंबोदर को केवल एक ही अभिव्यक्ति की अनुमति देने का बड़ा दोष है, कोई बयान नहीं। विशेष रूप से, इसका मतलब कोई असाइनमेंट नहीं हैc=chr(x+65)
। यह तब समस्याग्रस्त होता है जब किसी की लंबी अभिव्यक्ति होती है, जिसके मूल्य को दो बार (या अधिक) संदर्भित करने की आवश्यकता होती है।
E=enumerate
फ़ंक्शन के बाहर या वैकल्पिक तर्क के रूप में असाइनमेंट संभव हैं, लेकिन केवल तभी जब वे फ़ंक्शन इनपुट पर निर्भर न हों। वैकल्पिक तर्क f=lambda n,k=min(n,0):...
विफल हो जाते हैं क्योंकि इनपुट n
को परिभाषित नहीं किया गया है जबk
परिभाषा के समय पर मूल्यांकन ।
इसका परिणाम यह होता है कि कभी-कभी आप लंबोदर में एक लंबी अभिव्यक्ति को दोहराते हैं क्योंकि विकल्प लंबा लम्बा होता है।
lambda s:s.strip()+s.strip()[::-1]
def f(s):t=s.strip();print t+t[::-1]
विराम बिंदु 11 वर्णों ( विवरणों ) के बारे में है, अतीत जिसे आप def
या तो बदल देते हैं program
। दोहराया अभिव्यक्ति के लिए लंबाई 5 के सामान्य ब्रेक-सम प्वाइंट तक इसकी तुलना करें:
range(a)+range(b)
r=range;r(a)+r(b)
print s[1:],s[1:]*2
r=s[1:];print r,r*2
उदाहरण के लिए , अन्य भाषाओं में वर्कअराउंड, ऑक्टेव हैं । पाइथन के लिए जानी जाने वाली ट्रिक्स हैं, लेकिन वे लंबे, क्लंकी और / या सीमित-उपयोग हैं। लैंबडा में असाइनमेंट का अनुकरण करने के लिए एक छोटा, सामान्य-उद्देश्य विधि पायथन गोल्फिंग में क्रांति लाएगा।
इस सीमा के आसपास एक पायथन गोल्फर से पार पाने या काम करने के तरीके क्या हैं? जब वे लंबोदर में दो बार दोहराए गए एक लंबे अभिव्यक्ति को देखते हैं तो उनके पास क्या संभावित विचार होने चाहिए?
इस सुझाव के साथ मेरा लक्ष्य इस समस्या में गहरा गोता लगाना है और:
- कैटलॉग और एक लैम्ब्डा के अंदर नकली असाइनमेंट में गोल्फिंग वर्कआर्स का विश्लेषण करें
- बेहतर तरीकों के लिए नए लीड का अन्वेषण करें
प्रत्येक उत्तर को वर्कअराउंड या संभावित लीड की व्याख्या करनी चाहिए।
lambda s:(s+s[::-1]).lower()
। बेशक यह वास्तविक प्रश्न का उत्तर नहीं देता है।
strip
।