公司網(wǎng)站建設(shè)是哪個部門的事情ai智能營銷系統(tǒng)
谷歌內(nèi)部的 python 代碼規(guī)范
熟悉 python 一般都會努力遵循 pep8 規(guī)范,也會有一些公司制定內(nèi)部的代碼規(guī)范。大公司制定規(guī)范的目的不是說你一定要怎樣去使用編程語言,而是讓大家遵守同一套規(guī)則,節(jié)省其他人閱讀代碼的成本,方便協(xié)作和溝通。
對于個人而言,日常編寫代碼只需要保持風(fēng)格統(tǒng)一,前后一致,就是一個很大的勝利,然后再加入一些實用的規(guī)則,在寫代碼的時候有效減少可能引入的 bug。
接下來,我截取了一些谷歌的 python 代碼規(guī)范中一些有意思的要點,希望日后能更深刻的感受到它們的用處。
1,導(dǎo)入模塊和包,不導(dǎo)入單獨的類、函數(shù)或者變量。
這通常能簡化導(dǎo)入過程,方便命名空間管理。但是缺點也很明顯,當(dāng)名稱較長時,調(diào)用函數(shù)和類的代碼會很長,影響可讀性。
# yes
from sound.effects import echo
echo.EchoFilter()# no
from sound.effects.echo import EchoFilter
EchoFilter()
如果你想學(xué)習(xí)自動化測試,我這邊給你推薦一套視頻,這個視頻可以說是B站播放全網(wǎng)第一的自動化測試教程,同時在線人數(shù)到達(dá)1000人,并且還有筆記可以領(lǐng)取及各路大神技術(shù)交流:798478386????
【已更新】B站講的最詳細(xì)的Python接口自動化測試實戰(zhàn)教程全集(實戰(zhàn)最新版)_嗶哩嗶哩_bilibili【已更新】B站講的最詳細(xì)的Python接口自動化測試實戰(zhàn)教程全集(實戰(zhàn)最新版)共計200條視頻,包括:1、接口自動化之為什么要做接口自動化、2、接口自動化之request全局觀、3、接口自動化之接口實戰(zhàn)等,UP主更多精彩視頻,請關(guān)注UP賬號。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click?
2,從根目錄導(dǎo)入,不假定任意的 sys.path,也不使用相對導(dǎo)入。
假設(shè) doctor.who 路徑已經(jīng)被某種手段添加到了 sys.path,也應(yīng)該從開始的地方導(dǎo)入。
# yes
from doctor.who import jodie# other than doctor.who is already in sys.path
# no
import jodie
3,謹(jǐn)慎使用異常
使用異常需要注意的細(xì)節(jié)有:
●? 優(yōu)先合理的使用內(nèi)置異常類。比如需要正數(shù)的情況下傳遞了一個負(fù)數(shù)引發(fā)的錯誤,拋出 ValueError 類型。
●? 永遠(yuǎn)不要使用 except 捕獲所有的異常,這可能會造成一些隱藏 bug 難于發(fā)現(xiàn)。你應(yīng)該使用特定異常類型分開捕獲。
●? 不要使用 assert 指示某些意外情況,應(yīng)該使用 raise。
●? 不要在 try 和 except 子句中加入太多邏輯,try 塊的體積越大, 期望之外的異常就越容易被觸發(fā)。
盡量使用正確的內(nèi)置異常類型:
def division(a, b):if b == 0:raise ValueError('b can not be zero')
避免全局捕獲異常,指定異常類型:
# yes
try:1 / 0"abc"[100]
except ZeroDivisionError:...
except IndexError:...# no
try:1 / 0"abc"[100]
except:...
4、不要使用可變類型作為函數(shù)默認(rèn)值,如果修改了這個變量,默認(rèn)值也會跟著發(fā)生變化
# yes
def foo(a, b=None):if b is None:b = []
def foo(a, b: Sequence = ()):# no
def foo(a, b=[]):
def foo(a, b=time.time()):
def foo(a, b={}):
5,注意條件表達(dá)式的隱式布爾值
●?對于序列(字符串, 列表, 元組), 要注意空序列是 False,在判斷是否為空序列時,使用隱性的 if not seq 判斷,而不用 if len(seq) == 0;
●?判斷數(shù)字是否為 0,則使用 number == 0,而不使用用 if not number。因為 number 可能設(shè)置的是默認(rèn)值為 None。
●?判斷是否為 None 使用 x is None,而不用 not x。
# yes
.if not users: # sequence
if number == 0:
if i % 10 == 0:
def f(x=None):if x is None:# no
if len(users) == 0:
if number is not None and not number:
if not i % 10:
def f(x=None):x = x or []
6,謹(jǐn)慎使用裝飾器
裝飾器可以在函數(shù)的參數(shù)或返回值上執(zhí)行任何操作,這可能導(dǎo)致讓人驚異的隱藏行為。
而且, 裝飾器在導(dǎo)入時執(zhí)行,從裝飾器代碼中捕獲錯誤并處理是很困難的。
使用裝飾器一定要編寫單元測試,并且說明它的作用和使用方法。
裝飾器本身不要依賴于任何文件, socket, 數(shù)據(jù)庫連接。避免使用 @staticmedthod 裝飾器,多數(shù)情況下,將方法封裝成模塊級的函數(shù)可以達(dá)到同樣的效果。
7,建議使用類型聲明,類型聲明的好處非常明顯:
●? 使用類型聲明可以提高代碼的可讀性。
●? 也可以使用類型檢查工具提早發(fā)現(xiàn)問題。
●? 使用類型聲明之后,doc string 中就沒有必要對參數(shù)類型進(jìn)行說明。
●? 在編輯器中會根據(jù)類型進(jìn)行代碼提示。
但是在實際操作過程中,類型聲明往往很難維持。當(dāng)代碼更新完之后,一定要記得更新類型聲明,過時的類型聲明會對閱讀者造成誤導(dǎo)。python 的類型聲明成本學(xué)習(xí)成本較高。
# yes
name: str = 'yuz'
def func(a: int) -> List[int]: