日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python中argparse模塊及action='store_true'詳解_python

作者:PoomHey ? 更新時間: 2023-04-24 編程語言

Python argparse模塊詳解

argparse 是一個用來解析命令行參數的 Python 庫,它是 Python 標準庫的一部分。基于 python 2.7 的 stdlib 代碼。argparse 模塊使編寫用戶友好的命令行界面變得容易。程序定義了所需的參數,而 argparse 將找出如何從 sys.argv 中解析這些參數。argparse 模塊還會自動生成幫助和使用消息,并在用戶為程序提供無效參數時發出錯誤。

1. 問題描述

經常煉丹的朋友對下面這段代碼非常熟悉。

parser = argparse.ArgumentParser()
parser.add_argument('-c','--clean',action='store_true')
parser.add_argument('-r','--run',action='store_true')
config = parser.parse_args()

然后問題來了,action他的意義在這里是什么?

我去查了查資料,簡單的做個總結

2.?add_argument() 方法官方介紹

在這個方法中,

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

其中

action?- 當參數在命令行中出現時使用的動作基本類型。

詳細來講,就是

action

ArgumentParser?對象將命令行參數與動作相關聯。這些動作可以做與它們相關聯的命令行參數的任何事,盡管大多數動作只是簡單的向?

parse_args()?返回的對象上添加屬性。action?命名參數指定了這個命令行參數應當如何處理。供應的動作有:

'store'?- 存儲參數的值。這是默認的動作。

3. 實例測試與對比?

step01

用實例來講:

def testArgparse():
	parser = argparse.ArgumentParser(description = 'Argparse Demo.')
	parser.add_argument('-n', '--name', default = 'Lee')
	parser.add_argument('-m', '--money', default = '80W')
	args = parser.parse_args()
	print(' This content is ', args)
	name = args.name
	money = args.money
	print(' Shuai ge is {}, ta yi nian {}!'.format(name, money))
if __name__ == '__main__':
	testArgparse()

輸出的結果為:

step 02?

?接下來我們引入 store。

def testArgparse():
	parser = argparse.ArgumentParser(description = 'Argparse Demo.')
	parser.add_argument('-n', '--name', default = 'Lee')
	parser.add_argument('-m', '--money', action='store_const', const = '80W')
	args = parser.parse_args()
	print(' This content is ', args)
	name = args.name
	money = args.money
	print(' Shuai ge is {}, ta yi nian {}!'.format(name, money))
if __name__ == '__main__':
	testArgparse()

注意,我在這里增加了

action='store_const', const = '80W'

替換了原來的

default = '80w'

程序可以運行,但是我們可以看到,值出現了變化

money這里變成了none。

一步一步來。

step03:store后面是否可以自定義?

?代碼變紅了,我還以為可以。實際上不行。

step04:為什么我的輸出值為None?

修改了賦值語句之后,可以取到值。

但是對比可以得到,?取值時候需要加入索引。

parser.parse_args(['-m'])

step05 理解store_true,store_false

這個時候我們再回頭來看,就很清晰了,就是給參數賦值為true和false。

準確描述為:“當帶有store_true時,你傳入對應參數,則觸發為真,否則為假。”

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', action='store_true')
>>> parser.add_argument('--bar', action='store_false')
>>> parser.add_argument('--baz', action='store_false')
>>> parser.parse_args('--foo --bar'.split())
Namespace(foo=True, bar=False, baz=True)

那在我們具體應用中呢?

看實例

def testArgparse():
	parser = argparse.ArgumentParser(description = 'Argparse Demo.')
	parser.add_argument('-t', '--tag', action='store_true', help='是否能夠運行')
	parser.add_argument('-n', '--name', default = 'Lee')
	parser.add_argument('-m', '--money', action='store_const', const = '80W')
	args = parser.parse_args()
	print(' This content is ', args)
	name = args.name
	#money = args.money
	money = parser.parse_args(['-m'])
	tag= args.tag
	print(tag,int(tag))
	print(' Shuai ge is {}, ta yi nian {}!'.format(name, money))
if __name__ == '__main__':
	testArgparse()

當我們調用為true的時候,

這些就非常明確了。?

原文鏈接:https://blog.csdn.net/qq_33083551/article/details/123275512

欄目分類
最近更新