parser.add_argument('-auto', action='store_true')
Bagaimana cara menyimpan false jika -auto
tidak ditentukan? Sedikit dapat saya ingat bahwa dengan cara ini, ia menyimpan None jika tidak ditentukan
parser.add_argument('-auto', action='store_true')
Bagaimana cara menyimpan false jika -auto
tidak ditentukan? Sedikit dapat saya ingat bahwa dengan cara ini, ia menyimpan None jika tidak ditentukan
The store_true
pilihan secara otomatis membuat nilai default dari False .
Demikian juga, store_false
akan default ke True saat argumen baris perintah tidak ada.
Sumber untuk perilaku ini singkat dan jelas: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Dokumen argparse tidak jelas tentang subjeknya, jadi saya akan memperbaruinya sekarang: http://hg.python.org/cpython/rev/49677cc6d83a
-bar
, makadest
secara otomatis disetel kebar
, berdasarkan hg.python.org/cpython/rev/49677cc6d83a . Namun, saya tidak melihat di mana perilaku default ini disetel dalam kode. Saya selalu mengaturdest
argumen secara eksplisit. Juga, saya pikir membiarkanbar
default kedest
untuk--bar
opsi tidak benar-benar masuk akal jika--bar
inistore_false
. Bukankahdest
seharusnyanotbar
dalam kasus ini?Dengan
berlari
hasil
Jadi tampaknya menyimpan
False
secara default.sumber
Raymond Hettinger sudah menjawab pertanyaan OP.
Namun, grup saya mengalami masalah keterbacaan menggunakan "store_false". Apalagi saat anggota baru bergabung dengan grup kami. Ini karena cara berpikir yang paling intuitif adalah ketika pengguna menentukan argumen, nilai yang sesuai dengan argumen itu akan menjadi True atau 1.
Misalnya, jika kodenya adalah -
Pembaca kode mungkin mengharapkan pernyataan logging dimatikan ketika nilai dalam stop_logging benar. Tetapi kode seperti berikut ini akan mengarah pada kebalikan dari perilaku yang diinginkan -
Di sisi lain, jika antarmuka didefinisikan sebagai berikut, maka "pernyataan-jika" berfungsi dan lebih intuitif untuk dibaca -
sumber
parser.add_argument('--stop_logging', action='store_false', dest='use_logging')
.store_false sebenarnya akan menjadi default
0
secara default (Anda dapat menguji untuk memverifikasi). Untuk mengubah defaultnya, tambahkan sajadefault=True
ke deklarasi Anda.Jadi dalam kasus ini:
parser.add_argument('-auto', action='store_true', default=True)
sumber
>>> 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)