[英]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'
的特殊情況,分別用於存儲值True
和False
。 此外,它們分別創建False
和True
的默認值。
(加粗體)
在評論中, Charles Duffy說,“明確而不是隱含是一種風格選擇”,這是一個公平的觀點,但這也意味着如果你正在編輯代碼並且不小心將action
和default
不匹配,它會休息:
>>> 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
並且const
為True
。
add_argument
接受多個關鍵字參數並創建一個Action
子類 object。 不同的actions
使用不同的參數組合。 add_argument
對必需或多余的參數采取隨意的方法。 也就是說,沒有很多代碼可以檢查是否定義了正確的參數。
我會保留它,因為默認值是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.