簡體   English   中英

在 parser.add_argument 中同時包含 action='store_true' 和 default=False 有什么意義?

[英]What's the point of having both action='store_true' and default=False in parser.add_argument?

我一直讀這樣的代碼,

parser.add_argument('--name', action='store_true', default=False, help='XXX')

例如這段代碼man-sf-emnlp/train.py - midas-research

但是當你已經設置了action='store_true'時設置default=False有什么意義呢?

毫無意義。 文檔

'store_true''store_false' - 這些是'store_const'的特殊情況,分別用於存儲值TrueFalse 此外,它們分別創建FalseTrue的默認值。

(加粗體)


在評論中, Charles Duffy說,“明確而不是隱含是一種風格選擇”,這是一個公平的觀點,但這也意味着如果你正在編輯代碼並且不小心將actiondefault不匹配,它會休息:

>>> parser.add_argument('--name', action='store_true', default=True)
>>> parser.parse_args(['--name'])  # Good
Namespace(name=True)
>>> parser.parse_args([])  # Bad
Namespace(name=True)

而且我認為隱含的默認值無論如何都是顯而易見的。

store_true子類的__init__是:

class _StoreTrueAction(_StoreConstAction):

    def __init__(self,
                 option_strings,
                 dest,
                 default=False,
                 required=False,
                 help=None):
        super(_StoreTrueAction, self).__init__(
            option_strings=option_strings,
            dest=dest,
            const=True,
            default=default,
            required=required,
            help=help)

請注意,它設置了default=False 用戶代碼可以覆蓋它,但有什么意義呢? 這個子類只是一個store_const ,其中default值為False並且constTrue

add_argument接受多個關鍵字參數並創建一個Action子類 object。 不同的actions使用不同的參數組合。 add_argument對必需或多余的參數采取隨意的方法。 也就是說,沒有很多代碼可以檢查是否定義了正確的參數。

我會保留它,因為默認值是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM