Python是最容易學(xué)習(xí)的編程語(yǔ)言之一,其語(yǔ)法近似英語(yǔ)。通常,初學(xué)者只會(huì)遇到一些小麻煩,如強(qiáng)制縮進(jìn)、在函數(shù)中使用self等。
然而,當(dāng)開(kāi)始閱讀、復(fù)制和編輯他人代碼時(shí),麻煩就接踵而至了。
這里,我將解釋五個(gè)關(guān)于Python的概念,這些概念將有助于初學(xué)者修改他人代碼。這些建議通過(guò)總結(jié)Python開(kāi)發(fā)新手在研討會(huì)上遇到的問(wèn)題以及分析開(kāi)發(fā)者社區(qū)的在線討論編寫而成的。這些開(kāi)發(fā)者社區(qū)主要關(guān)注API的使用,圖像處理以及RICOH THETA相機(jī)的元數(shù)據(jù)(文本)處理等。其中,較為典型的開(kāi)發(fā)者具有JAVA、C、JavaScript或bash的中級(jí)編程經(jīng)驗(yàn),但在Python方面仍是新手。
他們可以自己編寫Python代碼來(lái)解決問(wèn)題,然而在閱讀他人代碼時(shí)往往會(huì)遇到問(wèn)題。
以下是幫助大家更好地理解Python的五點(diǎn)建議。
1. *args和**kwargs是函數(shù)參數(shù)
如果您查看Python模塊或者這些模塊的相關(guān)文檔,您可能會(huì)看到*args和**kwargs。它們看起來(lái)像C語(yǔ)言里的指針,實(shí)際上并非如此。*args只是函數(shù)的參數(shù)列表。**kwargs是關(guān)鍵字參數(shù)的字典。
*args示例:
輸出:
**kwargs示例:
輸出:
**args和**kwargs示例的代碼位于文件args_example.py,可在此處獲取。
2.列表解析是使用循環(huán)時(shí)的一種快捷方式
列表解析是返回列表的一種簡(jiǎn)便方法。在代碼中,for循環(huán)寫作for number in args。
當(dāng)循環(huán)中的表達(dá)式為num **2時(shí),返回的列表值將為參數(shù)的平方。
輸出:
您可以在列表解析的末尾添加過(guò)濾器以過(guò)濾輸出結(jié)果。例如,僅對(duì)偶數(shù)進(jìn)行平方,可以采用如下過(guò)濾方式:
輸出:
列表解析并未對(duì)for循環(huán)添加任何特殊的功能,采用這種方式是因?yàn)樗鼮楹?jiǎn)短,并且在習(xí)慣語(yǔ)法后會(huì)使代碼更易于閱讀。不過(guò)有些開(kāi)發(fā)者會(huì)過(guò)度使用列表解析,反而使代碼更難理解。這一點(diǎn)需要注意,復(fù)雜的列表解析和多個(gè)循環(huán)嵌套并非最佳實(shí)踐。
如果您剛開(kāi)始學(xué)習(xí)Python,并遇到一個(gè)復(fù)雜的for循環(huán),可以在網(wǎng)上搜索列表解析并查看如下三個(gè)組件的語(yǔ)法:
1. 表達(dá)式
2. for循環(huán)
3. 過(guò)濾器
3. F-strings可以替代.format()
Python非常適合處理字符串,至少提供了3到4種將變量插入字符串的方法。這些方法大多數(shù)都較為笨重,但是有一種非常酷。
字符串連接
之前您也許寫過(guò)如下代碼:
輸出:
這種寫法難以閱讀,并且容易出現(xiàn)錯(cuò)誤。即使存在語(yǔ)法高亮,仍會(huì)出現(xiàn)缺少空格的情況。
字符串替換
字符串替換可以幫助減少錯(cuò)誤。
輸出:
使用字符串替換的示例位于文件format_example.py,可在此處獲取。
字符串格式
一個(gè)更好的方式是使用.format()方法,如下所示:
盡管.format在字符串連接方面有很大地提升,但處理上仍然很笨重。
F-strings
要使用f-strings,首先需要將Python升級(jí)至3.6或3.7版本。
4. Lambda函數(shù)是匿名的
Python lambda函數(shù)是一種快捷方式。盡管可以將其指定為某變量,類似于普通函數(shù),但通常情況下使用如下語(yǔ)法寫作匿名函數(shù)。
輸出:
如同Python中的多數(shù)快捷方式,lambda函數(shù)并不會(huì)帶來(lái)新的功能。盡管如此,使用此語(yǔ)法可以減少代碼的復(fù)雜程度。
5. 使用裝飾器來(lái)擴(kuò)展Python函數(shù)
使用裝飾器時(shí),通常會(huì)在一個(gè)函數(shù)上方標(biāo)注@decorator_name。
裝飾器可以任意命名,例如@panda。在使用裝飾器時(shí),您無(wú)需了解如何創(chuàng)建自己的裝飾器以便使用,可以參考Django的http裝飾器的相關(guān)文檔。
import這行代碼允許您使用預(yù)先構(gòu)建好的裝飾器。在這種情況下,您只需了解@require_http_methods為您創(chuàng)建的函數(shù)my_view()添加的額外功能即可。