近期閱讀朱雷(@piglei)所著《Python工匠》一書,頗有收獲,特對(duì)書中每章節(jié)的總結(jié)部分內(nèi)容進(jìn)行摘錄,供自己未來進(jìn)一步學(xué)習(xí)。
在一段代碼里,變量和注釋是最接近自然語言的東西。因此,好的變量名,簡(jiǎn)明扼要的注釋可以顯著提升代碼的質(zhì)量。在給變量起名時(shí),盡量使用描述性強(qiáng)的名字,但也得注意別過了頭。
以下是“變量與注釋”章節(jié)的要點(diǎn)知識(shí)總結(jié):
1、變量和注釋決定“第一印象”:
a>變量和注釋是代碼里最接近自然語言的東西,它們的可讀性非常重要
b>即使是實(shí)現(xiàn)同一個(gè)算法,變量和注釋不一樣,給人的感覺也會(huì)截然不同
2、基礎(chǔ)知識(shí):
a>Python的變量賦值語法非常靈活,可以使用*variables 型號(hào)表達(dá)式靈活賦值
b>編寫注釋的兩個(gè)要點(diǎn):不要用來屏蔽代碼,而是用來解釋“為什么”
c>接口注釋是為使用者而寫,因此應(yīng)該簡(jiǎn)明扼要地描述函數(shù)職責(zé),而不必描述函數(shù)包含太多函數(shù)實(shí)現(xiàn)的內(nèi)部細(xì)節(jié)
d>可以用Sphinx格式文檔或類型注釋給變量表明類型
3、變量名字很重要
a>給變量起名要遵循PEP8原則,代碼的其它部分也同樣如此
b>盡量給變量其描述性強(qiáng)的名字,但評(píng)價(jià)描述性也需要結(jié)合場(chǎng)景
c>在保證描述性的前提下,變量名要盡量短
d>變量名要匹配它所表達(dá)的類型
e>可以使用一兩個(gè)字符的超短名字,但注意不要過度使用
f>同一段代碼內(nèi),不要出現(xiàn)多個(gè)相識(shí)的變量名,比如同時(shí)使用users、user1、user2這種序列
4、代碼的組織技巧
a>按照代碼的職責(zé)來組織代碼:讓變量定義靠近使用
b>適當(dāng)定義臨時(shí)變量可以提升代碼的可讀性
c>不必要的標(biāo)量會(huì)讓代碼顯得冗長、啰嗦
d>同一個(gè)作用域內(nèi)不要有太多變量,解決辦法:提煉數(shù)據(jù)類、拆分函數(shù)
e>空行也是一種特殊的“注釋”,適當(dāng)?shù)目招锌梢宰尨a更易讀
5、代碼的可維護(hù)性技巧
a>保持變量在兩個(gè)方面的一致性:名字一致性與類型一致性
b>顯示優(yōu)于隱式:不要使用locals()批量獲取變量
c>把接口注釋當(dāng)成一種函數(shù)設(shè)計(jì)工具:先寫注釋,后寫代碼
關(guān)于注釋
a>代碼注釋:Python注釋主要有2種,一種是最常見的代碼內(nèi)注釋,通過在行首輸入#號(hào)來表示,當(dāng)注釋包含多行內(nèi)容時(shí),同樣使用#號(hào):
# 用戶輸入可能會(huì)有空格,使用strip()去掉空格
username = extract_username(input_string.strip())
# 使用strip()去掉空格的好處:
# 1. 數(shù)據(jù)庫保存時(shí)占用空間更小
# 2. 不必因?yàn)橛脩舳啻蛄艘粋€(gè)空格而要求用戶重新輸入
username = extract_username(input_string.strip())
b>接口注釋:除使用#號(hào)注釋外,另外一種注釋則是函數(shù)(類)文檔(docstring),這些文檔也稱為接口注釋(interface comment),這些注釋在定義函數(shù)(類)名的下一行,使用兩個(gè)三連的單引號(hào)或雙引號(hào)'''? '''("""? """),用于解釋給調(diào)用函數(shù)(類)的用戶使用,解釋功能,及參數(shù)說明。
class Person:
"""人
:param name:姓名
:param age:年齡
:param favorite_color:最喜歡的顏色
"""
def __init__(self.name,age,favorite_color):
self.name = name
self.age = age
self.favorite_color = favorite_color
關(guān)于變量(我擬采用)
a>類名:采用駝峰命名法,第一個(gè)字母大寫,每個(gè)單詞首字母大寫,比如:FooClass
b>函數(shù):采用蛇形命名法,均小寫字母,下劃線連接,盡量描述,比如bar_function
c>常量:全大寫字母,下劃線相連,比如MAX_VALUE
d>普通變量:全小寫字母,下劃線相連,比如min_width
e>如果變量僅內(nèi)部使用,增加下劃線前綴,比如_local_value
f>如果變量名同關(guān)鍵字,增加下劃線后綴,比如class_
幾個(gè)知識(shí)點(diǎn):
a>單下劃線變量名?_
在常用的諸多變量名中,單下劃線 _ 是一個(gè)比較特殊的一個(gè)。它常作為一個(gè)無意義的占位符出現(xiàn)在賦值語句語句中。_這個(gè)名字本身沒有什么特別之處,算是約定俗成的一種用法。
比如在解包賦值時(shí)忽略某些變量,就可以使用 _ 作為變量名:
# 忽略展開時(shí)的第二個(gè)變量
author,_ = usernames
# 忽略第一個(gè)和最后一個(gè)變量之間的所有變量
username,*_,score = data
在Python交互命令行(直接執(zhí)行Python命令進(jìn)入的交互環(huán)境)里,_ 變量還有一個(gè)特殊的含義——默認(rèn)保存我們輸入的上個(gè)表達(dá)式的返回值。
b>給變量注明類型
Python是動(dòng)態(tài)類型語言,使用變量時(shí)不需要做任何類型聲明。這是優(yōu)勢(shì),讓編程變得簡(jiǎn)單,但可讀性就出現(xiàn)打折。為了解決動(dòng)態(tài)類型帶來的可讀性問題,最常見辦法就是在函數(shù)文檔(docstring)里做文章,可以把每個(gè)函數(shù)參數(shù)的類型與說明全都寫到函數(shù)文檔里。Python推薦如下:
def remove_invalid(items):
"""剔除items里面無效的元素
:param items:待剔除的對(duì)象
:type items:包含整數(shù)的列表,[int,...]
"""
在上面代碼的函數(shù)文檔中,使用type items:注明了items是個(gè)整數(shù)型列表。
在Python3.5版本之后,可以使用類型注解功能來直接注明變量類型,是Python內(nèi)置功能,越來越流行如此使用。案例如下:
from typing import List
def remove_invalid(items:List[int]):
"""剔除items里面無效的元素
:param items:待剔除的對(duì)象
"""
......
List 表示參數(shù)為列表類型,[int]表示里面的成員是整數(shù)。
需要注意:“類型注解”只是一種有關(guān)類型的注釋,系統(tǒng)并不提供任何校驗(yàn)功能。
c>匹配布爾型變量名一個(gè)原則:一定要讓讀到變量的人覺得它只是“肯定”和“否定”兩種可能。一般可以采用is、has、allow這些非黑即白的此裝飾,比如:
is_superuser :是否是超級(jí)用戶,是/不是
has_errors :有沒有錯(cuò)誤,有/沒有
allow_empth :是否允許為空值,允許/不允許
d>匹配int/float類型的變量名:當(dāng)人們看到和數(shù)字有關(guān)的名字時(shí),能夠自然會(huì)認(rèn)定是int或者float類型,比如:
釋義為數(shù)字的所有單詞:port(端口號(hào))、age(年齡)、radius(半徑)等;
使用以_id結(jié)尾的單詞:比如user_id、host_id;
使用length/count開頭或者結(jié)尾的單詞:lenght_of_username、max_length、user_count文章來源:http://www.zghlxwxcb.cn/news/detail-822419.html
最好別使用一個(gè)名稱的復(fù)數(shù)形式作為int類型的變量名,比如apples、trips等,因?yàn)檫@些名字容易和哪些裝著Apple和Trip的普通容器對(duì)象(列表)混淆,建議使用number_of_apples或trips_count這類復(fù)合詞來作為int類型的名。文章來源地址http://www.zghlxwxcb.cn/news/detail-822419.html
到了這里,關(guān)于Python學(xué)習(xí)筆記--變量與注釋的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!