Python 實戰 通過引數名傳遞引數值

2021-10-03 16:11:45 字數 2372 閱讀 9631

我在前幾天的文章中介紹了在shell中是如何通過引數名來傳遞引數值的。(shell - 通過引數名傳遞引數值)。今天繼續將這種場景延伸到python中。

1. 背景

2. 看療效

順序傳遞引數值

引數: 看原始碼

呼叫: python test.py arg1 arg2 arg3

接受: sys.ar**[1], sys.ar**[2], …

引數名傳遞引數值

引數: python test.py --help

呼叫1: python test.py -a arg1 -b arg2

呼叫2: python test.py --a arg1 --b arg2

3. 實現

在python中實現引數名傳遞引數很簡單,python提供了更好的方式argparse模組中的argumentparser類。

下面是乙個簡單的栗子

from argparse import argumentparser

import sys

parser = argumentparser(

)parser.parse_args(sys.ar**[1:

])

在終端執行檔案加上–help或者-h引數,就可以獲得說明,是不是很酷!

d:\desktop>python argparselearn.py  -

-help

usage: argparselearn.py [

-h]optional arguments:

-h,-

-help show this help message and exit

利用add_argument方法增加自定義引數

parser.add_argument(

'--foo'

,help

='foo help'

)parser.parse_args(

)

d:\desktop>python argparselearn.py  -

-help

usage: argparselearn.py [

-h][

--foo foo]

optional arguments:

-h,-

-help show this help message and exit

--foo foo foo help

d:\desktop>python argparselearn.py -

-foo 3

到這裡,argumentparser最基本的用法我們已經掌握了。是不是很簡單~~

上乙個完整的實戰栗子吧

#coding=utf-8

import argparse

defparse_args()

:#print sys.ar**

iflen

(sys.ar**)

<2:

sys.exit(1)

param =

parser = argparse.argumentparser(

) parser.add_argument(

"-s"

,type

=str

) parser.add_argument(

"-t"

,type

=str

) parser.add_argument(

"-u"

,type

=str

) args = parser.parse_args(

)if args.s and args.u and args.t:

param[

"status"

]= args.s

param[

"username"

]= args.u

param[

"taskid"

]= args.t

else

: sys.exit(-1

)return param

if __name__ ==

'__main__'

: param = parse_args(

) print_str(

"start param: "

+str

(param)

)

4.擴充套件

argparse的使用可遠遠不止這些,比如可以設定預設引數、設定引數為必選項等很多好用的功能等待你繼續學習。(argparse模組使用)

linux shell指令碼通過引數名傳遞引數值

平常在寫shell指令碼都是用 1,2.這種方式來接收引數,然而這種接收引數的方式不但容易忘記且不易於理解和維護。linux常用的命令都可指定引數名和引數值,然而我們怎樣才能給自己的shell指令碼也採用引數名和引數值這樣的方式來獲取引數值呢?而不是通過 1,2這種方式進行獲取。下面的例子定義了短引...

linux shell指令碼通過引數名傳遞引數值

平常在寫shell指令碼都是用 1,2.這種方式來接收引數,然而這種接收引數的方式不但容易忘記且不易於理解和維護。linux常用的命令都可指定引數名和引數值,然而我們怎樣才能給自己的shell指令碼也採用引數名和引數值這樣的方式來獲取引數值呢?而不是通過 1,2這種方式進行獲取。下面的例子定義了短引...

python 引數傳遞 Python 引數傳遞

python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...