目錄 命令行參數及 argparse 包 argparse 傳遞 bool 參數錯誤做法 argparse 傳遞 bool 參數正確做法 1 argparse 傳遞 bool 參數正確做法 2 References 在使用 argparse 解析 bool 參數時,需要設定 add_argument 的 action 參數為 'store_true' 或者 'store_false',而不是設定 type 參數為 bool,具體原因是,如果設定 type=bool,那么無論該參數傳 True 還是 False,最后都只能得到 True?!具@設定反人類】 命令行參數及 argparse 包 在我們需要控制不同分支代碼的執行時,命令行參數最適用了,代碼寫好后只需在命令行設定不同的參數運行即可。 在命令行參數的解析中,可以用到 argparse 包。 入門 argparse 可以參考教程 //docs.python.org/zh-cn/3.6/howto/argparse.html 給出一個最簡單的 argparse 解析命令行參數的例子:(以下代碼保存在 tmp.py 文件中) import argparse parser = argparse.ArgumentParser() parser.add_argument('--seed',? dest='seed', type=int, default=0) args = parser.parse_args() print(args) 通過在命令行執行python3 tmp.py --seed 1來改變 seed 參數的值,seed 參數的值可以通過args.seed獲取。 argparse 傳遞 bool 參數錯誤做法 argparse 對 bool 類型數據的傳遞,和其它類型如 int、float、str 不一樣,如下所示: import argparse parser = argparse.ArgumentParser() # 這種寫法是錯的,結果不是你所想象的 parser.add_argument('--test',? dest='test', type=bool, default=False) args = parser.parse_args() ?print(args) 如果我們在命令行執行python3 tmp.py --test False和python3 tmp.py --test True,我們會得到同樣的結果,args.test 都會是 True。這有點反人類了。 argparse 傳遞 bool 參數正確做法 1 在傳遞 bool 值時,正確的做法是: import argparse parser = argparse.ArgumentParser() # action 的取值可以是 'store_true'、'store_false',都是小寫 parser.add_argument('--test',? dest='test', action='store_true', default=False) parser.parse_args() ?print(args) 之后如果需要 test 參數為真,那么就在命令行執行python3 tmp.py --test,否則,就不要帶上 test 參數,如python3 tmp.py。 argparse 傳遞 bool 參數正確做法 2 import argparse ??parser = argparse.ArgumentParser()?? parser.add_argument('--test',? dest="test", action='store_true') ?parser.add_argument('--no_test',? dest="test", action='store_false')? parser.set_defaults(test=False)? args = parser.parse_args() ?print(args) 如果需要設置args.test為 True,那么執行python3 tmp.py --test;如果需要設置args.test為 False,執行 python3 tmp.py --no_test。 References Parsing boolean values with argparse - Stack Overflow
轉載自://www.cnblogs.com/wuliytTaotao/p/11795011.html
欧美黄色网