有些時(shí)候我們需要通過(guò)命令行將參數(shù)傳遞給腳本,C語(yǔ)言中有個(gè)getopt()方法,python中也有個(gè)類似的命令行參數(shù)解析方法getopt()。python也提供了比getopt()更簡(jiǎn)潔的argparse方法。另外,sys模塊也可以實(shí)現(xiàn)簡(jiǎn)單的參數(shù)解析,本文將對(duì)這3種命令行參數(shù)解析方法簡(jiǎn)要介紹。
成都創(chuàng)新互聯(lián)長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鼓樓企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站制作,鼓樓網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
sys.argv是傳入的參數(shù)列表,sys.argv[0]是當(dāng)前python腳本的名稱,sys.argv[1]表示第一個(gè)參數(shù),以此類推。
命令行運(yùn)行:
可以看到傳入的參數(shù)通過(guò)sys.argv來(lái)獲取,它就是一個(gè)參數(shù)列表。
python的getopt與C語(yǔ)言的的getopt()函數(shù)類似。相比于sys模塊,支持長(zhǎng)參數(shù)和短參數(shù),并對(duì)參數(shù)解析賦值。但它需要結(jié)合sys模塊進(jìn)行參數(shù)解析,語(yǔ)法格式如下:
短參數(shù)為單個(gè)英文字母,如果必須賦值需要在后面加英文冒號(hào)( : ),長(zhǎng)參數(shù)一般為字符串(相比短參數(shù),更能說(shuō)明參數(shù)含義),如果必須賦值需要在后面加等號(hào)( = )。
命令行運(yùn)行:
注意:短參數(shù)(options)和長(zhǎng)參數(shù)(long_options)不需要一一對(duì)應(yīng),可以任意順序,也可以只有短參數(shù)或者只有長(zhǎng)參數(shù)。
argparse模塊提供了很多可以設(shè)置的參數(shù),例如參數(shù)的默認(rèn)值,幫助消息,參數(shù)的數(shù)據(jù)類型等。argparse類主要包括ArgumentParser、add_argument和parse_args三個(gè)方法。
下面介紹這三個(gè)函數(shù)的使用方法。
argparse默認(rèn)提供了 -h | --help 參數(shù):
命令行運(yùn)行:
下面列出部分參數(shù):
下面來(lái)添加參數(shù):
命令行運(yùn)行:
parse_args() 方法用于解析參數(shù),在前面的示例代碼中使用parse_args方法來(lái)提取參數(shù)值,對(duì)于無(wú)效或者錯(cuò)誤的參數(shù)會(huì)打印錯(cuò)誤信息和幫助信息:
命令行運(yùn)行:
本文介紹了Python的三種命令行參數(shù)解析方法sys.argv、getopt和argparse,可以根據(jù)自己的需要進(jìn)行選擇,getopt和argparse兩種方法相比來(lái)說(shuō),建議選擇argparse,代碼量更少更簡(jiǎn)潔。更詳細(xì)的使用方法參考官方文檔:
--THE END--
推導(dǎo)式(又稱解析式)是Python的一種獨(dú)有特性,是可以從一個(gè)數(shù)據(jù)序列構(gòu)建另一個(gè)新的數(shù)據(jù)序列的結(jié)構(gòu)體。
共有三種推導(dǎo),在Python2和3中都支持:
列表推導(dǎo)式(又稱列表解析式)提供了一種簡(jiǎn)明扼要的方法來(lái)創(chuàng)建列表。
它的結(jié)構(gòu)是在一個(gè)中括號(hào)里包含一個(gè)表達(dá)式,然后是一個(gè)for語(yǔ)句,然后是0個(gè)或多個(gè)for或者if語(yǔ)句。這個(gè)表達(dá)式可以是任意的,你可以在列表中放入任意類型的對(duì)象。返回結(jié)果將是一個(gè)新的列表,在這個(gè)以if和for語(yǔ)句為上下文的表達(dá)式運(yùn)行完成之后產(chǎn)生。
標(biāo)準(zhǔn)規(guī)范:
這里是另外一個(gè)簡(jiǎn)明例子:
這將對(duì)快速生成列表非常有用。有些人甚至更喜歡使用它而不是filter函數(shù)。
列表推導(dǎo)式在有些情況下超贊,特別是當(dāng)你需要使用for循環(huán)來(lái)生成一個(gè)新列表。舉個(gè)例子,你通常會(huì)這樣做:
你可以使用列表推導(dǎo)式來(lái)簡(jiǎn)化它,就像這樣:
字典推導(dǎo)和列表推導(dǎo)的使用方法是類似的。
在上面的例子中我們把同一個(gè)字母但不同大小寫的值合并起來(lái)了。就我個(gè)人來(lái)說(shuō)沒(méi)有大量使用字典推導(dǎo)式。
你還可以快速對(duì)換一個(gè)字典的鍵和值:
它跟列表推導(dǎo)式也是類似的,唯一的區(qū)別在于它使用大括號(hào){ }。
舉個(gè)例子:
一、函數(shù)的定義
函數(shù)是指將一組語(yǔ)句的集合通過(guò)一個(gè)名字(函數(shù)名)封裝起來(lái),想要執(zhí)行這個(gè)函數(shù),只需要調(diào)用函數(shù)名即可
特性:
減少重復(fù)代碼
使程序變得可擴(kuò)展
使程序變得易維護(hù)
二、函數(shù)的參數(shù)
2.1、形參和實(shí)參數(shù)
形參,調(diào)用時(shí)才會(huì)存在的值
實(shí)慘,實(shí)際存在的值
2.2、默認(rèn)參數(shù)
定義:當(dāng)不輸入?yún)?shù)值會(huì)有一個(gè)默認(rèn)的值,默認(rèn)參數(shù)要放到最后
2.3、 關(guān)鍵參數(shù)
定義: 正常情況下,給函數(shù)傳參數(shù)要安裝順序,不想按順序可以用關(guān)鍵參數(shù),只需要指定參數(shù)名即可,(指定了參數(shù)名的就叫關(guān)鍵參數(shù)),但是要求是關(guān)鍵參數(shù)必須放在位置參數(shù)(以位置順序確定對(duì)應(yīng)的參數(shù))之后
2.4、非固定參數(shù)
定義: 如你的函數(shù)在傳入?yún)?shù)時(shí)不確定需要傳入多少個(gè)參數(shù),就可以使用非固定參數(shù)
# 通過(guò)元組形式傳遞
# 通過(guò)列表形式傳遞
# 字典形式(通過(guò)k,value的方式傳遞)
# 通過(guò)變量的方式傳遞
三、函數(shù)的返回值
作用:
返回函數(shù)執(zhí)行結(jié)果,如果沒(méi)有設(shè)置,默認(rèn)返回None
終止函數(shù)運(yùn)行,函數(shù)遇到return終止函數(shù)
四、變量的作用域
全局變量和局部變量
在函數(shù)中定義的變量叫局部變量,在程序中一開始定義的變量叫全局變量
全局變量作用域整個(gè)程序,局部變量作用域是定義該變量的函數(shù)
當(dāng)全局變量與局部變量同名是,在定義局部變量的函數(shù)內(nèi),局部變量起作用,其他地方全局變量起作用
同級(jí)的局部變量不能互相調(diào)用
想要函數(shù)里邊的變量設(shè)置成全局變量,可用global進(jìn)行設(shè)置
五、特殊函數(shù)
5.1、嵌套函數(shù)
定義: 嵌套函數(shù)顧名思義就是在函數(shù)里邊再嵌套一層函數(shù)
提示 在嵌套函數(shù)里邊調(diào)用變量是從里往外依次調(diào)用,意思就是如果需要調(diào)用的變量在當(dāng)前層沒(méi)有就會(huì)去外層去調(diào)用,依次內(nèi)推
匿名函數(shù)
基于Lambda定義的函數(shù)格式為: lambda 參數(shù):函數(shù)體
參數(shù),支持任意參數(shù)。
匿名函數(shù)適用于簡(jiǎn)單的業(yè)務(wù)處理,可以快速并簡(jiǎn)單的創(chuàng)建函數(shù)。
# 與三元運(yùn)算結(jié)合
5.3、高階函數(shù)
定義:變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱之為高階函數(shù) 只需要滿足一下任意一個(gè)條件,即是高階函數(shù)
接收一個(gè)或多個(gè)函數(shù)作為輸入
return返回另一個(gè)函數(shù)
5.4、遞歸函數(shù)
定義:一個(gè)函數(shù)可以調(diào)用其他函數(shù),如果一個(gè)函數(shù)調(diào)用自己本身,這個(gè)函數(shù)就稱為遞歸函數(shù)
在默認(rèn)情況下Python最多能遞歸1000次,(這樣設(shè)計(jì)師是為了防止被內(nèi)存被撐死)可以通過(guò)sys.setrecursionlimit(1500)進(jìn)行修改
遞歸實(shí)現(xiàn)過(guò)程是先一層一層的進(jìn),然后在一層一層的出來(lái)
必須有一個(gè)明確的條件結(jié)束,要不然就是一個(gè)死循環(huán)了
每次進(jìn)入更深層次,問(wèn)題規(guī)模都應(yīng)該有所減少
遞歸執(zhí)行效率不高,遞歸層次過(guò)多會(huì)導(dǎo)致站溢出
# 計(jì)算4的階乘 4x3x2x1
# 打印數(shù)字從1-100
5.5、閉包現(xiàn)象
定義:內(nèi)層函數(shù)調(diào)用外層函數(shù)的變量,并且內(nèi)存函數(shù)被返回到外邊去了
閉包的意義:返回的函數(shù)對(duì)象,不僅僅是一個(gè)函數(shù)對(duì)象,在該函數(shù)外還包裹了一層作用域,這使得,該函數(shù)無(wú)論在何處調(diào)用,優(yōu)先使用自己外層包裹的作用域
1. Int()整數(shù)
2. Float()浮點(diǎn)數(shù)
3. Str()字符串
4. Ord()返回對(duì)應(yīng)的ASCII值或Unicode值
5. Chr()通過(guò)ASCII返回對(duì)應(yīng)的值
6. Bool()布爾運(yùn)算
7. bin()轉(zhuǎn)換為二進(jìn)制
8. hex()轉(zhuǎn)換為十六進(jìn)制
9. oct()轉(zhuǎn)換為八進(jìn)制
10. list()將元組轉(zhuǎn)換為列表
11. tuple()轉(zhuǎn)換為元組
12. dict()創(chuàng)建字典
13. bytes()轉(zhuǎn)換為字節(jié)