網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
當(dāng)我們執(zhí)行某個(gè)Python代碼,例如文件mycode.py時(shí),想要傳遞一些可以隨時(shí)改變的自定義的參數(shù)。
比如在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時(shí)候,我們?yōu)榱朔奖阈薷挠?xùn)練的batch大小,epoch的大小等等,往往不想去動(dòng)代碼。
此時(shí)最方便的方法就是在執(zhí)行代碼的時(shí)候從命令行傳入?yún)?shù)。
argparse.ArgumentParser()可以很好地滿足這一需求。
1.簡(jiǎn)單示例???
先看一段簡(jiǎn)單的代碼,在名為mycode.py的文件中
import argparse
?
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
args = parser.parse_args()
print(args.square**2)
改代碼首先創(chuàng)建一個(gè)ArgumentParser對(duì)象,而添加為了參數(shù)square,則采用方法parser.add_argument。
每添加一個(gè)參數(shù),就需要調(diào)用一次該方法。
args = parser.parse_args()則是使得改代碼生效。
執(zhí)行這段代碼時(shí),我們?cè)诿钚休斎?/p>
$ python mycode.py 9
可以得到輸出結(jié)果是9的平方,即81。
當(dāng)然,添加多個(gè)參數(shù)時(shí),執(zhí)行的時(shí)候順序輸入這些參數(shù)。
例如mycode.py中是如下代碼:
import argparse
?
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)
我們?cè)诿钚休斎?/p>
$ python mycode.py 20 999
可以得到輸出結(jié)果是
400
999
2.argparse.ArgumentParser():創(chuàng)建對(duì)象
argparse.ArgumentParser()可設(shè)置的參數(shù)挺多,這里只提一下description這一個(gè)參數(shù),他是一個(gè)自定義文本參數(shù),可以用來(lái)描述這個(gè)程序是做什么的,也可以隨便寫點(diǎn)東西,總之,不影響程序的功能,可以看做是個(gè)注釋。
例如執(zhí)行下一段代碼
parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument("square", help="display a square of a given number", type=int)
parser.add_argument("number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)
parser.print_help()
其中parser.print_help()的功能是我們創(chuàng)建的parser的相關(guān)信息。
命令行輸入
$ python mycode.py 20 999
輸出結(jié)果為
400
999
usage: day1.py [-h] square numberPyTorch MNIST pruning from deep compression paper
positional arguments:
? square ? ? ?display a square of a given number
? number ? ? ?display a given numberoptional arguments:
? -h, --help ?show this help message and exit
可以看到,description中的文字也得到了輸出。
3.parser.add_argument():添加參數(shù)
parser.add_argument()可配置的參數(shù)比較多,第一個(gè)是name,也就是名稱。
前面的例子中,我們用了
parser.add_argument("square", help="display a square of a given number", type=int)
其中"square"就是傳遞給name的參數(shù)(也可以單引號(hào)的’square’)。
這里還有個(gè)help參數(shù),他和argparse.ArgumentParser()中的description類似,沒(méi)有實(shí)際作用,起到一個(gè)注釋的作用,會(huì)在parser.print_help()后打印出來(lái)。
而顯然type參數(shù)指定了輸入?yún)?shù)的類型,int是整數(shù),float是浮點(diǎn),str是字符串。
回到name參數(shù),他除了可以直接用上面的square字符串,也可以一個(gè)橫杠加字符串以及兩個(gè)橫杠加字符串,例如’-sqaure’和’–square’。
常見(jiàn)的是兩個(gè)橫杠的寫法。下面來(lái)說(shuō)說(shuō)我個(gè)人發(fā)現(xiàn)的區(qū)別。
沒(méi)有橫杠的寫法,如我們前面所示,在命令行傳入?yún)?shù)的時(shí)候,不需要重寫名字,直接輸入?yún)?shù):
$ python mycode.py 20 999
但是假如使用兩個(gè)橫杠的name,直接傳入?yún)?shù)會(huì)報(bào)錯(cuò),需要在傳入?yún)?shù)的時(shí)候重寫name。
例如下列代碼
parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument("--square", help="display a square of a given number", type=int)
parser.add_argument("--number", help="display a given number", type=int)
args = parser.parse_args()
print(args.square**2)
print(args.number)
命令行執(zhí)行時(shí)需要
$ python mycode.py --square 20 --number 999
另外一個(gè)需要提到的點(diǎn)是name的取名時(shí),字符串中的橫杠和下劃線似乎是等價(jià)的。
例如
parser.add_argument('--batch_size', type=int, default=50)
和
parser.add_argument('--batch-size', type=int, default=50)
是等價(jià)的。但是傳遞參數(shù)的時(shí)候,name是橫杠也得用橫杠;name是下劃線也得用下劃線:
parser.add_argument('--batch_size', type=int, default=50)
$ python mycode.py --batch_size 128
或者
parser.add_argument('--batch-size', type=int, default=50)
$ python mycode.py --batch-size 128
調(diào)用的時(shí)候統(tǒng)一用下劃線:
print(args.batch_size)
個(gè)人建議傳遞name的時(shí)候還是用下劃線別用橫杠,方便查找。
這里default用于定義沒(méi)有傳遞參數(shù)時(shí),該參數(shù)的默認(rèn)值。
需要注意的是,name參數(shù)用橫杠的名稱的時(shí)候設(shè)置default值,命令行執(zhí)行程序的時(shí)候可以不傳入?yún)?shù)或者傳入部分參數(shù),沒(méi)傳入的參數(shù)使用默認(rèn)值;name參數(shù)用沒(méi)有橫杠的名稱的時(shí)候,必須傳入?yún)?shù)。
下面的parser.add_argument()用到了action參數(shù):
parser.add_argument('--no-cuda', action='store_true',help='disables CUDA training')
action='store_true’表示如果我們?cè)诿钚信渲眠@個(gè)參數(shù),則該參數(shù)為True;不配置則默認(rèn)為False。
類似的action='store_false’表示如果我們?cè)诿钚信渲眠@個(gè)參數(shù),則該參數(shù)為False;不配置則默認(rèn)為True。
配置action類型的參數(shù)不需要傳入具體的數(shù)值或者字符串,例如上例中,只需要
$ python mycode.py ----no-cuda
則表示對(duì)該參數(shù)進(jìn)行了配置,他會(huì)被設(shè)為True。
metavar參數(shù)只對(duì)用parser.print_help()打印參數(shù)信息的時(shí)候會(huì)有影響,并不影響程序的其他功能。
例如
parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument('--batch_size', type=int, default=50,?
? ? ? ? ? ? ? ? ? ? help='input batch size for training (default: 50)')
args = parser.parse_args()
parser.print_help()
打印結(jié)果為
usage: day1.py [-h] [--batch_size BATCH_SIZE]
PyTorch MNIST pruning from deep compression paper
optional arguments:
? -h, --help ? ? ? ? ? ?show this help message and exit
? --batch_size BATCH_SIZE
? ? ? ? ? ? ? ? ? ? ? ? input batch size for training (default: 50)
假如設(shè)置metavar參數(shù):
parser = argparse.ArgumentParser(description='PyTorch MNIST pruning from deep compression paper')
parser.add_argument('--batch_size', type=int, default=50, metavar='N',
? ? ? ? ? ? ? ? ? ? help='input batch size for training (default: 50)')
args = parser.parse_args()
parser.print_help()
打印結(jié)果為
usage: day1.py [-h] [--batch_size N]
PyTorch MNIST pruning from deep compression paper
optional arguments:
? -h, --help ? ? ?show this help message and exit
? --batch_size N ?input batch size for training (default: 50)
可見(jiàn),只是改變了一些參數(shù)的顯示。
為傳遞多個(gè)參數(shù),可以用nagrs。當(dāng)nargs為1時(shí),有且只能傳入一個(gè)參數(shù):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--one', nargs=1, required=True)
args = parser.parse_args()
print(args.one)
輸出
$ python mycode.py --one ?1
$ ['1']
當(dāng)nargs為其他數(shù)值,例如3時(shí),表示必須傳入3個(gè)參數(shù):
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--three', nargs=3, required=True)
args = parser.parse_args()
print(args.three)
輸出
$ python mycode.py --three ?1 2 3
$ ['1', '2', '3']
當(dāng)設(shè)置了nargs參數(shù),則輸出是一個(gè)list。
dest參數(shù)可以改變argparse.ArgumentParser()對(duì)應(yīng)的參數(shù)調(diào)用時(shí)候的名稱。
例如下面這一段
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
? ? ? ? ? ? ? ? ? ? help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
? ? ? ? ? ? ? ? ? ? const=sum, default=max,
? ? ? ? ? ? ? ? ? ? help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
如果第二個(gè)參數(shù)沒(méi)有dest=‘a(chǎn)ccumulate’,則在調(diào)用的時(shí)候,最后一行代碼只能是
print(args.sum(args.integers))
dest使得它在調(diào)用的時(shí)候被改名。但要注意在命令行傳入?yún)?shù)的時(shí)候仍然是用name的字符串,即–sum。
總結(jié)
原文鏈接:https://blog.csdn.net/qq_36665989/article/details/120476651
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了
相關(guān)推薦
- 2022-11-07 react-native?實(shí)現(xiàn)漸變色背景過(guò)程_React
- 2022-04-07 C++11實(shí)現(xiàn)字符串分割的示例_C 語(yǔ)言
- 2023-07-05 【Redis】數(shù)據(jù)被刪除,內(nèi)存占用還這么大?
- 2022-08-18 C語(yǔ)言系統(tǒng)日期和時(shí)間實(shí)例詳解_C 語(yǔ)言
- 2022-05-03 ASP.NET?Core基于滑動(dòng)窗口實(shí)現(xiàn)限流控制_實(shí)用技巧
- 2023-05-24 golang?recover函數(shù)使用中的一些坑解析_Golang
- 2023-07-07 Minio提示:io.minio.errors.InvalidResponseException:
- 2022-10-21 PID原理與python的簡(jiǎn)單實(shí)現(xiàn)和調(diào)參_python
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支