parser.add_argument('-auto', action='store_true')
-auto
Belirtilmemişse nasıl yanlış depolayabilirim ? Bu şekilde, belirtilmemişse Hiçbirini depoladığını hafifçe hatırlayabiliyorum
Yanıtlar:
store_true
Seçeneği otomatik varsayılan değeri oluşturur Yanlış .
Benzer şekilde, komut satırı argümanı olmadığında store_false
varsayı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 0
varsayılan olacaktır (doğrulamak için test edebilirsiniz). Varsayılanı değiştirmek default=True
iç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 sonradest
otomatik olarak ayarlanırbar
dayalı hg.python.org/cpython/rev/49677cc6d83a . Ancak, bu varsayılan davranışın kodda nerede ayarlandığını görmüyorum. Ben her zamandest
argümanı açıkça belirledim . Ayrıca, izin düşünüyorumbar
için varsayılandest
için--bar
eğer gerçekten mantıklı değil seçeneği--bar
olduğunustore_false
. Olmamalıdest
olmaknotbar
bu durumda?