您好,登錄后才能下訂單哦!
本篇內容介紹了“衡量python代碼質量的唯一有效標準是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
給變量、函數、類、包取名字時要做到名副其實,見名知義。如果名稱需要用注釋來補充說明,多半就不是一個很好的名字。例如:
int d
def bar():
pass
不要與系統內置名字一樣,例如id、sum、len 之類的名字都是內置函數名字,你可以取一個和業務相關的名字,例如:account_id。
用可搜索的常量名代替常量值,例如有個分頁參數是每頁10條大小,我們可以定義一個常量 PAGE_SIZE=10,其它地方都可以使用。如果孤零零的寫成10,后面要修改的時候找起來就麻煩。
get_data(10)
vs
PAGE_SIZE = 10
get_data(PAGE_SIZE)
名字沒有最好只有更好,這次沒有找到合適的名字,下次找到合適的名字時利用重構手法將其修改掉,但是對于已經對外暴露的API,改名字可要小心了。
函數應該短小,函數應該只做一件事,并且做好這件事,不要同時做兩件事,keep it simple and stupid。多少行算短小并沒有嚴格的定義,如果你能把一個函數所做的事情拆分成12345等多個步驟,那么它做的事情就不是一件而是5件了。
舉個爬蟲的例子:通過某個url鏈接爬取數據并保存到數據庫可分為幾個步驟:
發起網絡請求并得到數據
對數據進行清洗
保存數據庫
也就是說這個操作至少可以拆分成三個函數,而且每個步驟可能有涉及到一些更少的步驟,例如發送請求的時候需要封裝參數,包括請求頭參數、代理參數、查詢參數等等。如果所有邏輯全部寫在一個函數就像一坨屎。把每個小功能拆分成更小的函數不僅能清晰地體現代碼邏輯還有你的編程思路。
函數參數同樣盡可能少,最理想的是沒有參數,其次是一個參數,再次是兩個參數,盡量避免三個以上的參數,除非你有足夠的理由必須使用3個參數。參數多了怎么辦?想辦法把參數抽象成對象。
函數中要消除冗余,減少重復,很多時候你做的事情都是類似的,例如獲取各種模型的數據列表涉及的分頁等操作,就可以把通用代碼抽象成公用邏輯。
說起注釋,我們都認為它是個好東西,好雖好,但是它卻不能美化爛代碼,所以不要太過于依賴注釋來解釋代碼意圖,而盡量要通過代碼本身來解釋代碼邏輯。沒用的代碼注釋通常有
廢話式注釋
def get_all(cwd):
get_dir = os.listdir(cwd) #遍歷當前目錄,獲取文件列表
for i in get_dir:
sub_dir = os.path.join(cwd,i) # 把第一步獲取的文件加入路徑
if os.path.isdir(sub_dir): #如果當前仍然是文件夾,遞歸調用
get_all(sub_dir)
else:
ax = os.path.basename(sub_dir) #如果當前路徑不是文件夾,則把文件名放入列表
result.append(ax)
print(len(result)) #對列表計數
這段代碼是從github截的,所有的注釋都是對api的解釋,并沒其它意義。
長串注釋掉的代碼
def merge_cookies(cookiejar, cookies):
if not isinstance(cookiejar, cookielib.CookieJar):
raise ValueError('You can only merge into CookieJar')
if isinstance(cookies, dict):
cookiejar = cookiejar_from_dict(
cookies, cookiejar=cookiejar, overwrite=False)
# elif isinstance(cookies, cookielib.CookieJar):
# try:
# cookiejar.update(cookies)
# except AttributeError:
# for cookie_in_jar in cookies:
# cookiejar.set_cookie(cookie_in_jar)
總擔心哪天代碼又會改回來,舍不得刪除。如果你的代碼還不是用git這樣的版本控制系統的話,可以暫時保留。但是現在不用git都不好意出門打招呼是不。
誤導性注釋,這種注釋是最要命的,最初寫了注釋,幾個月后代碼邏輯發生了翻天覆地的變化,注釋卻還是保留在最初的版本。
話說如此,但是有些注釋還是有必要的,例如函數的文檔注釋,用來說明函數的作用,如果你的函數名字不能很好的自我闡述時,配上注釋就是退而求其次的方法。還有一種注釋就是對意圖的解釋,例如:
try:
current_position = o.tell()
except (OSError, IOError):
# This can happen in some weird situations, such as when the file
# is actually a special file descriptor like stdin. In this
# instance, we don't know what the length is, so set it to zero and
# let requests chunk it instead.
if total_length is not None:
current_position = total_length
這里的注釋向讀者解釋什么場景下會發生這種異常,以及如何處理。這是把作者的思路告訴讀者的一種方式。
TODO 注釋也是一種常用的注釋,例如有些地方展示用一種臨時的替代方案實現,未來你將對其進行優化時可以用 # TODO
標記,現在大部分IDE都支持TODO注釋高亮顯示。
“衡量python代碼質量的唯一有效標準是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。