parser.add_argument('-auto', action='store_true')
-autoBelirtilmemişse nasıl yanlış depolayabilirim ? Bu şekilde, belirtilmemişse Hiçbirini depoladığını hafifçe hatırlayabiliyorum
Yanıtlar:
store_trueSeçeneği otomatik varsayılan değeri oluşturur Yanlış .
Benzer şekilde, komut satırı argümanı olmadığında store_falsevarsayılan olarak True olacaktır .
Bu davranışın kaynağı kısa ve özdür: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Argparse belgeleri konu hakkında net değil, bu yüzden şimdi güncelleyeceğim: http://hg.python.org/cpython/rev/49677cc6d83a
Raymond Hettinger, OP'nin sorusuna şimdiden cevap veriyor.
Ancak, grubum "store_false" kullanarak okunabilirlik sorunları yaşadı. Özellikle grubumuza yeni üyeler katıldığında. Bunun nedeni, düşünmenin en sezgisel yolu, bir kullanıcı bir argüman belirlediğinde, o argümana karşılık gelen değerin True veya 1 olacağıdır.
Örneğin, kod -
parser.add_argument('--stop_logging', action='store_false')
Kod okuyucu, stop_logging'deki değer doğru olduğunda, günlükleme ifadesinin kapalı olmasını bekleyebilir. Ancak aşağıdaki gibi bir kod , istenen davranışın tersine yol açacaktır -
if not stop_logging:
#log
Öte yandan, arayüz aşağıdaki gibi tanımlanmışsa, "if-ifadesi" çalışır ve okuması daha sezgiseldir -
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 aslında varsayılan olarak 0varsayılan olacaktır (doğrulamak için test edebilirsiniz). Varsayılanı değiştirmek default=Trueiçin beyanınıza eklemeniz yeterlidir.
Yani bu durumda:
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, daha sonradestotomatik olarak ayarlanırbardayalı hg.python.org/cpython/rev/49677cc6d83a . Ancak, bu varsayılan davranışın kodda nerede ayarlandığını görmüyorum. Ben her zamandestargümanı açıkça belirledim . Ayrıca, izin düşünüyorumbariçin varsayılandestiçin--bareğer gerçekten mantıklı değil seçeneği--barolduğunustore_false. Olmamalıdestolmaknotbarbu durumda?