Jawaban:
The store_truepilihan secara otomatis membuat nilai default dari False .
Demikian juga, store_falseakan 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
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 -
parser.add_argument('--stop_logging', action='store_false')
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 -
if not stop_logging:
#log
Di sisi lain, jika antarmuka didefinisikan sebagai berikut, maka "pernyataan-jika" berfungsi dan lebih intuitif untuk dibaca -
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 sebenarnya akan menjadi default 0secara default (Anda dapat menguji untuk memverifikasi). Untuk mengubah defaultnya, tambahkan saja default=Trueke deklarasi Anda.
Jadi dalam kasus ini:
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, makadestsecara otomatis disetel kebar, berdasarkan hg.python.org/cpython/rev/49677cc6d83a . Namun, saya tidak melihat di mana perilaku default ini disetel dalam kode. Saya selalu mengaturdestargumen secara eksplisit. Juga, saya pikir membiarkanbardefault kedestuntuk--baropsi tidak benar-benar masuk akal jika--barinistore_false. Bukankahdestseharusnyanotbardalam kasus ini?