最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

命令行傳遞參數(shù)argparse.ArgumentParser的使用解析

 更新時(shí)間:2023年02月17日 17:20:46   作者:Puppy_L  
這篇文章主要介紹了命令行傳遞參數(shù)argparse.ArgumentParser的使用解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

當(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.簡單示例   

先看一段簡單的代碼,在名為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對象,而添加為了參數(shù)square,則采用方法parser.add_argument。

每添加一個(gè)參數(shù),就需要調(diào)用一次該方法。

args = parser.parse_args()則是使得改代碼生效。

執(zhí)行這段代碼時(shí),我們在命令行輸入

$ 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)

我們在命令行輸入

$ python mycode.py 20 999

可以得到輸出結(jié)果是

400
999

2.argparse.ArgumentParser():創(chuàng)建對象

argparse.ArgumentParser()可設(shè)置的參數(shù)挺多,這里只提一下description這一個(gè)參數(shù),他是一個(gè)自定義文本參數(shù),可以用來描述這個(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 number

PyTorch MNIST pruning from deep compression paper

positional arguments:
  square      display a square of a given number
  number      display a given number

optional 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類似,沒有實(shí)際作用,起到一個(gè)注釋的作用,會(huì)在parser.print_help()后打印出來。

而顯然type參數(shù)指定了輸入?yún)?shù)的類型,int是整數(shù),float是浮點(diǎn),str是字符串。

回到name參數(shù),他除了可以直接用上面的square字符串,也可以一個(gè)橫杠加字符串以及兩個(gè)橫杠加字符串,例如’-sqaure’和’–square’。

常見的是兩個(gè)橫杠的寫法。下面來說說我個(gè)人發(fā)現(xiàn)的區(qū)別。

沒有橫杠的寫法,如我們前面所示,在命令行傳入?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用于定義沒有傳遞參數(shù)時(shí),該參數(shù)的默認(rèn)值。

需要注意的是,name參數(shù)用橫杠的名稱的時(shí)候設(shè)置default值,命令行執(zhí)行程序的時(shí)候可以不傳入?yún)?shù)或者傳入部分參數(shù),沒傳入的參數(shù)使用默認(rèn)值;name參數(shù)用沒有橫杠的名稱的時(shí)候,必須傳入?yún)?shù)。

下面的parser.add_argument()用到了action參數(shù):

parser.add_argument('--no-cuda', action='store_true',help='disables CUDA training')

action='store_true’表示如果我們在命令行配置這個(gè)參數(shù),則該參數(shù)為True;不配置則默認(rèn)為False。

類似的action='store_false’表示如果我們在命令行配置這個(gè)參數(shù),則該參數(shù)為False;不配置則默認(rèn)為True。

配置action類型的參數(shù)不需要傳入具體的數(shù)值或者字符串,例如上例中,只需要

$ python mycode.py ----no-cuda

則表示對該參數(shù)進(jìn)行了配置,他會(huì)被設(shè)為True。

metavar參數(shù)只對用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)

可見,只是改變了一些參數(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()對應(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ù)沒有dest=‘accumulate’,則在調(diào)用的時(shí)候,最后一行代碼只能是

print(args.sum(args.integers))

dest使得它在調(diào)用的時(shí)候被改名。但要注意在命令行傳入?yún)?shù)的時(shí)候仍然是用name的字符串,即–sum。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索

    使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索

    這篇文章主要為大家介紹了使用Python Typing模塊提升代碼可讀性和健壯性實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python調(diào)用C語言的方法【基于ctypes模塊】

    Python調(diào)用C語言的方法【基于ctypes模塊】

    這篇文章主要介紹了Python調(diào)用C語言的方法,涉及Python基于ctypes模塊調(diào)用C語言編譯后的動(dòng)態(tài)鏈接庫文件相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python lambda和Python def區(qū)別分析

    Python lambda和Python def區(qū)別分析

    Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù)。這些叫做lambda的函數(shù),是從Lisp借用來的,可以用在任何需要函數(shù)的地方
    2014-11-11
  • Python pkg_resources模塊動(dòng)態(tài)加載插件實(shí)例分析

    Python pkg_resources模塊動(dòng)態(tài)加載插件實(shí)例分析

    當(dāng)編寫應(yīng)用軟件時(shí),我們通常希望程序具有一定的擴(kuò)展性,額外的功能——甚至所有非核心的功能,都能通過插件實(shí)現(xiàn),具有可插拔性。特別是使用 Python 編寫的程序,由于語言本身的動(dòng)態(tài)特性,為我們的插件方案提供了很多種實(shí)現(xiàn)方式
    2022-08-08
  • Python中處理無效數(shù)據(jù)的詳細(xì)教程

    Python中處理無效數(shù)據(jù)的詳細(xì)教程

    無效數(shù)據(jù)是指不符合數(shù)據(jù)收集目的或數(shù)據(jù)收集標(biāo)準(zhǔn)的數(shù)據(jù),這些數(shù)據(jù)可能來自于不準(zhǔn)確的測量、缺失值、錯(cuò)誤標(biāo)注、虛假的數(shù)據(jù)源或其他問題,本文就將帶大家學(xué)習(xí)Python中如何處理無效數(shù)據(jù),感興趣的同學(xué)可以跟著小編一起來學(xué)習(xí)
    2023-06-06
  • Python Pandas 獲取列匹配特定值的行的索引問題

    Python Pandas 獲取列匹配特定值的行的索引問題

    這篇文章主要介紹了Python Pandas 獲取列匹配特定值的行的索引問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python垃圾回收及Linux?Fork

    Python垃圾回收及Linux?Fork

    這篇文章主要介紹了Python垃圾回收及Linux?Forkm,Python垃圾回收主要以引用計(jì)數(shù)為主,分代回收為輔,而一個(gè)進(jìn)程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲(chǔ)數(shù)據(jù)和代碼的空間,下面來看文章具體介紹吧
    2022-01-01
  • 基于python讀取圖像的幾種方式匯總

    基于python讀取圖像的幾種方式匯總

    Python進(jìn)行圖片處理,第一步就是讀取圖片,下面這篇文章主要給大家介紹了關(guān)于基于python讀取圖像的幾種方式的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python實(shí)現(xiàn)爬取千萬淘寶商品的方法

    python實(shí)現(xiàn)爬取千萬淘寶商品的方法

    這篇文章主要介紹了python實(shí)現(xiàn)爬取千萬淘寶商品的方法,涉及Python頁面抓取的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python生成并下載文件后端代碼實(shí)例

    Python生成并下載文件后端代碼實(shí)例

    這篇文章主要介紹了Python生成并下載文件后端代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評論

望都县| 吉安县| 澜沧| 涟源市| 土默特左旗| 平果县| 金沙县| 沅陵县| 固始县| 喜德县| 临邑县| 惠东县| 长顺县| 津市市| 财经| 开平市| 资源县| 乌拉特前旗| 河津市| 华阴市| 潢川县| 夏河县| 上犹县| 甘谷县| 黄冈市| 大理市| 棋牌| 大方县| 古浪县| 乾安县| 宁海县| 郎溪县| 乐昌市| 金山区| 溧阳市| 兴城市| 余姚市| 克东县| 太谷县| 庄浪县| 开平市|