यहां अधिकांश उत्तर बहुत पुराने हैं, और विशेष रूप से स्वीकार किए गए हैं, इसलिए यह अपडेट करने लायक लगता है।
सबसे पहले, आधिकारिक पायथन एफएक्यू इसे कवर करता है, और elif
सरल मामलों के dict
लिए और बड़े या अधिक जटिल मामलों के लिए श्रृंखला की सिफारिश करता है । यह visit_
कुछ मामलों के लिए तरीकों का एक सेट (कई सर्वर फ्रेमवर्क द्वारा उपयोग की जाने वाली शैली) भी सुझाता है :
def dispatch(self, value):
method_name = 'visit_' + str(value)
method = getattr(self, method_name)
method()
एफएक्यू में पीईपी 275 का भी उल्लेख है , जिसे सी-स्टाइल स्विच स्टेटमेंट को जोड़ने के लिए आधिकारिक रूप से एक बार और सभी निर्णय लेने के लिए लिखा गया था। लेकिन उस PEP को वास्तव में Python 3 के लिए स्थगित कर दिया गया था, और इसे केवल एक अलग प्रस्ताव PEP 3103 के रूप में आधिकारिक तौर पर खारिज कर दिया गया था । उत्तर, निश्चित रूप से, नहीं- लेकिन दो पीईपी में अतिरिक्त जानकारी के लिए लिंक हैं यदि आप कारणों या इतिहास में रुचि रखते हैं।
एक बात जो कई बार सामने आई (और पीईपी 275 में देखी जा सकती है, भले ही इसे वास्तविक सिफारिश के रूप में काट दिया गया हो) यह है कि यदि आप 4 मामलों को संभालने के लिए कोड की 8 लाइनें होने से वास्तव में परेशान हैं, तो 6 बनाम। लाइनें आपके पास C या Bash में होंगी, आप इसे हमेशा लिख सकते हैं:
if x == 1: print('first')
elif x == 2: print('second')
elif x == 3: print('third')
else: print('did not place')
यह पीईपी 8 द्वारा बिल्कुल प्रोत्साहित नहीं किया गया है, लेकिन यह पठनीय है और बहुत कम नहीं है।
PEP 3103 को अस्वीकार किए जाने के एक दशक से अधिक समय के बाद, C- स्टाइल केस स्टेटमेंट्स, या यहां तक कि गो में थोड़ा अधिक शक्तिशाली संस्करण के मुद्दे को मृत माना गया है; जब भी कोई इसे अजगर-विचारों या -देव पर लाता है, तो उन्हें पुराने निर्णय के लिए भेजा जाता है।
हालांकि, पूर्ण एमएल-स्टाइल पैटर्न मिलान का विचार हर कुछ वर्षों में उठता है, खासकर जब से स्विफ्ट और रस्ट जैसी भाषाओं ने इसे अपनाया है। समस्या यह है कि बीजगणितीय डेटा प्रकारों के बिना पैटर्न मिलान से बहुत अधिक उपयोग करना मुश्किल है। जबकि गुइडो विचार के प्रति सहानुभूति रखते हैं, किसी के पास एक प्रस्ताव नहीं है जो पायथन में बहुत अच्छी तरह से फिट बैठता है। (आप एक उदाहरण के लिए मेरे 2014 के स्ट्रोमैन को पढ़ सकते हैं ।) यह dataclass
3.7 में बदल सकता है और enum
योग के प्रकारों को संभालने के लिए अधिक शक्तिशाली और कुछ प्रकार के बयान-स्थानीय बाइंडिंग के लिए विभिन्न प्रस्तावों के साथ कुछ छिटपुट प्रस्ताव (जैसे पीईपी 3150 , या) वर्तमान में प्रस्ताव पर चर्चा की जा रही है)। लेकिन अब तक, यह नहीं है।
पर्ल 6-शैली के मिलान के लिए कभी-कभी प्रस्ताव भी होते हैं, जो मूल रूप elif
से एकल-प्रेषण-स्विचिंग के लिए regex से सब कुछ का एक मश्मश है ।