回答:
このstore_true
オプションは、デフォルト値のFalseを自動的に作成します。
同様に、コマンドライン引数が存在しない場合、store_false
デフォルトでTrueになります。
この動作のソースは簡潔で明確です。 http //hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
argparseのドキュメントは件名が明確でないため、ここで更新します。http://hg.python.org/cpython/rev/49677cc6d83a
レイモンド・ヘッティンガーはOPの質問にすでに答えています。
ただし、私のグループでは、「store_false」を使用した可読性の問題が発生しています。特に新しいメンバーが私たちのグループに参加するとき。これは、ユーザーが引数を指定すると、その引数に対応する値がTrueまたは1になると考えるのが最も直感的な方法であるためです。
たとえば、コードが-
parser.add_argument('--stop_logging', action='store_false')
コードリーダーは、stop_loggingの値がtrueの場合、ロギングステートメントがオフになることを期待している可能性があります。しかし、次のようなコードは、望ましい動作の反対を導きます-
if not stop_logging:
#log
一方、インターフェースが次のように定義されている場合、「ifステートメント」が機能し、より直感的に読むことができます-
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
、dest
が自動的にに設定されるようです。ただし、このデフォルトの動作がコードのどこに設定されているかはわかりません。引数は常に明示的に設定しました。また、私はさせると思うにデフォルトのためならば、本当に意味がないオプションです。このケースではないはずですか?bar
dest
bar
dest
--bar
--bar
store_false
dest
notbar