中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

谷歌內部python代碼規范的示例分析

發布時間:2021-09-18 09:07:29 來源:億速云 閱讀:169 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“谷歌內部python代碼規范的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“谷歌內部python代碼規范的示例分析”這篇文章吧。

谷歌內部的 python 代碼規范

熟悉 python 一般都會努力遵循 pep8 規范,也會有一些公司制定內部的代碼規范。大公司制定規范的目的不是說你一定要怎樣去使用編程語言,而是讓大家遵守同一套規則,節省其他人閱讀代碼的成本,方便協作和溝通。對于個人而言,日常編寫代碼只需要保持風格統一,前后一致,就是一個很大的勝利,然后再加入一些實用的規則,在寫代碼的時候有效減少可能引入的 bug。

接下來,我截取了一些谷歌的 python 代碼規范中一些有意思的要點,希望日后能更深刻的感受到它們的用處。

1.導入模塊和包,不導入單獨的類、函數或者變量。

這通常能簡化導入過程,方便命名空間管理。但是缺點也很明顯,當名稱較長時,調用函數和類的代碼會很長,影響可讀性。

  # yes
from sound.effects import echo
echo.EchoFilter()
 
# no
from sound.effects.echo import EchoFilter
EchoFilter()

2.從根目錄導入,不假定任意的 sys.path,也不使用相對導入。

假設 doctor.who 路徑已經被某種手段添加到了 sys.path,也應該從開始的地方導入。

  # yes
from doctor.who import jodie
 
# other than doctor.who is already in sys.path
# no
import jodie

3.謹慎使用異常

使用異常需要注意的細節有:

  • 優先合理的使用內置異常類。比如需要正數的情況下傳遞了一個負數引發的錯誤,拋出 ValueError 類型。

  • 永遠不要使用 except 捕獲所有的異常,這可能會造成一些隱藏 bug 難于發現。你應該使用特定異常類型分開捕獲。

  • 不要使用 assert 指示某些意外情況,應該使用 raise。

  • 不要在 try 和 except 子句中加入太多邏輯,try 塊的體積越大, 期望之外的異常就越容易被觸發。

盡量使用正確的內置異常類型:

  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.不要使用可變類型作為函數默認值,如果修改了這個變量,默認值也會跟著發生變化。

  # 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.注意條件表達式的隱式布爾值

  • 對于序列(字符串, 列表, 元組), 要注意空序列是 False,在判斷是否為空序列時,使用隱性的 if not seq 判斷,而不用 if len(seq) == 0;

  • 判斷數字是否為 0,則使用 number == 0,而不使用用 if not number。因為 number 可能設置的是默認值為 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.謹慎使用裝飾器

裝飾器可以在函數的參數或返回值上執行任何操作,這可能導致讓人驚異的隱藏行為。而且, 裝飾器在導入時執行,從裝飾器代碼中捕獲錯誤并處理是很困難的。使用裝飾器一定要編寫單元測試,并且說明它的作用和使用方法。裝飾器本身不要依賴于任何文件, socket, 數據庫連接。避免使用 @staticmedthod 裝飾器,多數情況下,將方法封裝成模塊級的函數可以達到同樣的效果。

7.建議使用類型聲明,類型聲明的好處非常明顯:

  • 使用類型聲明可以提高代碼的可讀性。

  • 也可以使用類型檢查工具提早發現問題。

  • 使用類型聲明之后,doc string 中就沒有必要對參數類型進行說明。

  • 在編輯器中會根據類型進行代碼提示。

但是在實際操作過程中,類型聲明往往很難維持。當代碼更新完之后,一定要記得更新類型聲明,過時的類型聲明會對閱讀者造成誤導。python 的類型聲明成本學習成本較高。

  # yes
name: str = 'yuz'
def func(a: int) -> List[int]:

以上是“谷歌內部python代碼規范的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长治市| 马鞍山市| 香河县| 绥宁县| 谢通门县| 蓬溪县| 德安县| 若羌县| 达日县| 繁峙县| 合山市| 托克托县| 镶黄旗| 耒阳市| 焉耆| 越西县| 丹东市| 淮滨县| 万宁市| 白水县| 定结县| 勐海县| 英吉沙县| 家居| 遵化市| 赤城县| 察隅县| 轮台县| 东兴市| 广昌县| 台安县| 弥勒县| 昌邑市| 汝阳县| 临汾市| 马山县| 中阳县| 那曲县| 额尔古纳市| 海晏县| 辽源市|