1. 程式人生 > >python 開發規範 預覽版

python 開發規範 預覽版

邏輯 3.6 一行 應該 ror off user except sta

python 開發規範 預覽版

本文主要參考 pep8和jumpserver開發規範,結合實際,進行修改,歡迎提出修改意見。

代碼檢查工具

  • pylint
  • pycharm --> code --> Reformat Code 格式化當前文件代碼格式
  • pycharm --> 右擊項目 --> Inspect Code 根據pep8格式檢查當前項目

基本的代碼布局

導入

import x
from x import y
from x import y as z

禁止import  x,y

異常

使用 as

try:
    raise Error
except Error as error:
    pass

縮進

1. Python 嚴格采用4個空格的縮進,任何 Python 代碼都都必須遵守此規定。
2. 字符,    後面空一個格

最大行長度

限制最大120個字符。

長語句縮進

編寫長語句時,可以使用換行符""換行。在這種情況下,下一行應該與上一行的最後一個“.”句點或“=”對齊,或者是縮進4個空格符。

this_is_a_very_long(function_call, ‘with many parameters‘)     .that_returns_an_object_with_an_attribute

MyModel.query.filter(MyModel.scalar > 120)              .order_by(MyModel.name.desc())              .limit(10)

如果你使用括號“()”或花括號“{}”為長語句換行,那麽下一行應與括號或花括號對齊:

this_is_a_very_long(function_call, ‘with many parameters‘,
                    23, 42, ‘and even more‘)

對於元素眾多的列表或元組,在第一個“[”或“(”之後馬上換行:

items = [
    ‘this is the first‘, ‘set of items‘, ‘with more items‘,
    ‘to come in this line‘, ‘like this‘
]

空行

頂層函數與類之間空兩行,此外都只空一行。不要在代碼中使用太多的空行來區分不同的邏輯模塊。

def hello(name):
    print(‘Hello %s!‘ % name)

class MyClass(object):
    """This is a simple docstring."""

    def __init__(self, name):
        self.name = name

    def get_annoying_name(self):
        return self.name.upper() + ‘!!!!111‘

空格規則

單目運算符與運算對象之間不空格(例如,-,~等),即使單目運算符位於括號內部也一樣。
雙目運算符與運算對象之間要空格

exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict[‘key‘]

字符格式化

使用 f‘{name}{value}‘

比較

  • 任意類型之間的比較,使用“isinstance(L, list)”和“not isinstance(L, list)”
  • 與單例(singletons)進行比較時,使用 is 和 is not。
  • 永遠不要與True或False進行比較(例如,不要這樣寫:foo == False,而應該這樣寫:if not foo)。
  • 否定成員關系檢查, 使用 foo not in bar,而不是 not foo in bar。

命名約定

  • 類名稱:采用駱駝拼寫法(CamelCase。
  • 變量名:小寫_以及_下劃線(lowercase_with_underscores)。
  • 方法與函數名:小寫_以及_下劃線(lowercase_with_underscores)。
  • 常量:大寫_以及_下劃線(UPPERCASE_WITH_UNDERSCORES)。
  • 預編譯的正則表達式:name_re。
  • 受保護的元素以一個下劃線為前綴。雙下劃線前綴只有定義混入類(mixin classes)時才使用。
  • 如果使用關鍵詞(keywords)作為類名稱,應在名稱後添加後置下劃線(trailing underscore)。 允許與內建變量重名,不要在變量名後添加下劃線進行區分。如果函數需要訪問重名的內建變量,請將內建變量重新綁定為其他名稱。
  • 命名要有寓意, 不使用拼音,不使用無意義簡單字母命名 (循環中計數例外 for i in)
  • 命名縮寫要謹慎, 盡量是大家認可的縮寫
  • 盡量 避免使用全局變量, 用類變量來代替

函數和方法的參數:

  • 類方法:cls 為第一個參數。
  • 實例方法:self 為第一個參數。
  • property函數中使用匿名函數(lambdas)時,匿名函數的第一個參數可以用 x 替代, 例如:display_name = property(lambda x: x.real_name or x.username)。
  • 禁止參數裏面 直接寫 字符id,用其他替代,例如 asset_id

文檔註釋(Docstring,即各方法,類的說明文檔註釋)

所有文檔字符串均以 reStructuredText 格式編寫,方便 Sphinx 處理。文檔字符串的行數不同,布局也不一樣。 如果只有一行,代表字符串結束的三個引號與代表字符串開始的三個引號在同一行。 如果為多行,文檔字符串中的文本緊接著代表字符串開始的三個引號編寫,代表字符串結束的三個引號則自己獨立成一行。 (有能力盡可能用英文, 否則請中文優雅註釋)


def foo():
    """This is a simple docstring."""

def bar():
    """This is a longer docstring with so much information in there    
    that it spans three lines.  In this case, the closing triple quote    
    is on its own line.    
    """

文檔字符串應分成簡短摘要(盡量一行)和詳細介紹。如果必要的話,摘要與詳細介紹之間空一行。

註釋(Comment)類 函數 註釋

def AvailableZones(self, instance_charge_type, region_id):
    """
    功能: 可用區
    :param instance_charge_type: 計費方式
    :param region_id:    地域
    :return:  [‘cn-huhehaote-a‘, ‘cn-huhehaote-b‘]
    """

模塊頭部

模塊文件的頭部包含有 utf-8 編碼聲明(如果模塊中使用了非 ASCII 編碼的字符,建議進行聲明),以及標準的文檔字符串。

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

參考:http://docs.jumpserver.org/zh/docs/python_style_guide.html

python 開發規範 預覽版