답변:
이 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
Raymond Hettinger는 이미 OP의 질문에 대답합니다.
그러나 우리 그룹은 "store_false"를 사용하여 가독성 문제를 경험했습니다. 특히 새로운 회원이 우리 그룹에 가입 할 때. 사용자가 인수를 지정하면 해당 인수에 해당하는 값이 True 또는 1이된다는 것이 가장 직관적 인 생각이기 때문입니다.
예를 들어, 코드가-
parser.add_argument('--stop_logging', action='store_false')
코드 판독기는 stop_logging의 값이 true 일 때 로깅 문이 꺼져있을 것으로 예상 할 수 있습니다. 그러나 다음과 같은 코드 는 원하는 동작 의 반대로 이어질 것 입니다.
if not stop_logging:
#log
반면에 인터페이스가 다음과 같이 정의되면 "if-statement"가 작동하고 더 직관적으로 읽을 수 있습니다.
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
이면 hg.python.org/cpython/rev/49677cc6d83a 기반dest
으로 자동으로 설정됩니다 . 그러나 코드에서이 기본 동작이 어디에 설정되어 있는지 알 수 없습니다. 나는 항상 명시 적으로 인수를 설정했습니다 . 또한, 나는시키는 생각 받는 기본 위한 경우 정말 이해가되지 않는 옵션 입니다 . 는 안 될 이 경우에는?bar
dest
bar
dest
--bar
--bar
store_false
dest
notbar