लंबे समय तक मैं यह पता लगाने की कोशिश कर रहा हूं कि पाइथन कार्यों में झंडे को पार करने का सबसे अच्छा तरीका क्या है। सबसे सरल तरीका है कुछ की तरह:पायथन: फ़ंक्शन को फ़्लैग पास करना
def func(data, flag1, flag2, flag3):
...
func(my_data, True, False, True)
के बाद से शब्द "सही" या "गलत" आप क्या ध्वज सेट किया जा रहा है के बारे में कुछ भी नहीं बताता है यह, वास्तव में अच्छा और संक्षिप्त है, लेकिन अविश्वसनीय रूप से पढ़ने के लिए मुश्किल है, और आप बाईं ओर से शुरू होने वाले तर्कों को ध्यान से गिनना होगा। आप उन्हें कीवर्ड तर्क कर सकते हैं:
def func(data, flag1=False, flag2=False, flag3=False):
...
func(my_data, flag1=True, flag3=True)
लेकिन इस तरह के अनावश्यक है, क्योंकि "सही" कोई अर्थ बिल्कुल नहीं होता। मैं इसे एक सूची के रूप गुजारें सकता:
func(mydata, ['flag1', 'flag3'])
या
func(mydata, [func.flag1, func.flag3])
लेकिन पहले नहीं बल्कि गंदा लगता है, झंडे के रूप में तार का उपयोग कर, और दूसरा अभी भी कुछ हद तक दोहराव है। आदर्श रूप में मैं कुछ कहना चाहता हूं:
func(my_data, flag1, flag3)
न्यूनतम क्रियाशक्ति और अनावश्यकता के साथ एक समारोह में झंडे को पारित करने के लिए। क्या अजगर में ऐसा कुछ करने का कोई तरीका है?
संपादित करें: मैं के साथ जा रहा समाप्त हो गया: संकलन समय (तार गुजर रहा बनाम) की जाँच, कोई नाम स्थान प्रदूषण (के रूप में वैश्विक "enum" s का उपयोग करके करने का विरोध किया:
func(mydata, flagA=1, flagB=1)
ज्यादातर वर्णित कारणों के लिए
) और न्यूनतम बॉयलरप्लेट (= 1 या = 0 केवल 2 अक्षर हैं, बनाम 5 या 6 = सही या = गलत)। यह भी बहुत आसान झंडे के लिए डिफ़ॉल्ट मान सेट करता है:
def func(data, flagA=1, flagB=0, flagC=1):
...
जो कहीं अधिक स्पष्ट और हुप्स के माध्यम से कूद करने के लिए निकालने और ** kwarg शैली झंडे चूक आवंटित करने के लिए तुलना में कहीं अधिक आसान है। झंडे मूल रूप से स्थाई रूप से चेक किए जाते हैं और लिखने के लिए बहुत स्पष्ट/साफ होते हैं। अब अगर केवल मैं पिछले दो पात्रों ...
आप/पहली जगह में झंडे उत्तीर्ण करने की आवश्यकता क्यों करना चाहते हैं? शायद आपको अपने इंटरफ़ेस पर पुनर्विचार करना चाहिए ... –
झंडे का उपयोग डेटा संरचना में बूल सेट करने के लिए किया जाएगा, जो तब डेटा संरचना पर चलने वाले कार्यों के भविष्य के व्यवहार को नियंत्रित करेगा। यह एक पूरी तरह गैर-ओओ दृष्टिकोण है, लेकिन मैंने इसे सादगी से चुना है; भले ही, मैंने इसे ओओ-स्टाइल किया है, व्यवहारिक परिवर्तन बहुत सूक्ष्म हैं और शायद कक्षाओं के पूरे परिवार को संभालने के लायक नहीं हैं। –
हो सकता है कि आप मूल्यों वाले एक (सरल) डेटा संरचना को पास कर सकें? झंडे का एक 'सेट', या 'dict' मैपिंग ध्वज नाम बूल के लिए ... –