जवाबों:
store_true
विकल्प स्वचालित रूप से डिफ़ॉल्ट मान बनाता है झूठी ।
इसी तरह, कमांड-लाइन तर्क मौजूद नहीं होने store_false
पर True पर डिफ़ॉल्ट हो जाएगा ।
इस व्यवहार का स्रोत संक्षिप्त और स्पष्ट है: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
अर्गपर्स डॉक्स विषय पर स्पष्ट नहीं हैं, इसलिए मैं उन्हें अभी अपडेट करूंगा: http://hg.python.org/cpython/rev/49677cc6d83a
रेमंड हेटिंगर ने ओपी के सवाल का पहले ही जवाब दे दिया।
हालाँकि, मेरे समूह ने "store_false" का उपयोग करके पठनीयता के मुद्दों का अनुभव किया है। खासकर जब नए सदस्य हमारे समूह में शामिल होते हैं। ऐसा इसलिए है क्योंकि यह सोचने का सबसे सहज तरीका है कि जब कोई उपयोगकर्ता किसी तर्क को निर्दिष्ट करता है, तो उस तर्क के अनुरूप मूल्य सही या 1 होगा।
उदाहरण के लिए, यदि कोड है -
parser.add_argument('--stop_logging', action='store_false')
कोड रीडर संभवतः लॉगिंग स्टेटमेंट बंद होने की उम्मीद कर सकता है जब stop_log में मान सत्य है। लेकिन निम्नलिखित जैसे कोड वांछित व्यवहार के विपरीत को जन्म देंगे -
if not stop_logging:
#log
दूसरी ओर, यदि इंटरफ़ेस को निम्नलिखित के रूप में परिभाषित किया गया है, तो "if-statement" काम करता है और पढ़ने के लिए अधिक सहज है -
parser.add_argument('--stop_logging', action='store_true')
if not stop_logging:
#log
parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
:।
store_false वास्तव में डिफ़ॉल्ट रूप से 0
डिफ़ॉल्ट होगा (आप सत्यापित करने के लिए परीक्षण कर सकते हैं)। यह क्या चूक करता है इसे बदलने के लिए, बस default=True
अपनी घोषणा में जोड़ें ।
तो इस मामले में:
parser.add_argument('-auto', action='store_true', default=True)
>>> parser.add_argument('--bar', action='store_false')
_StoreFalseAction(option_strings=['--bar'], dest='bar', nargs=0, const=False, default=True, type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args([])
Namespace(bar=True)
-bar
, तो hg.python.org/cpython/rev/49677cc6d83a के आधार परdest
स्वचालित रूप से सेट हो जाता है । हालाँकि, मैं यह नहीं देखता कि यह डिफ़ॉल्ट व्यवहार कोड में कहाँ सेट है। मैंने हमेशा तर्क स्पष्ट रूप से निर्धारित किया है। इसके अलावा, मुझे लगता है कि विकल्प के लिए डिफ़ॉल्ट देना वास्तव में कोई मतलब नहीं है अगर है । नहीं करना चाहिए हो इस मामले में?bar
dest
bar
dest
--bar
--bar
store_false
dest
notbar