久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python代碼規(guī)范

 乙甲壬 2020-07-11
python代碼規(guī)范

python代碼規(guī)范

本規(guī)范基于Python社區(qū)官方代碼風(fēng)格文檔PEP-0008

基本格式

縮進

  • 使用4個空格進行縮進

  • 不要使用 tab 縮進

  • 使用任何編輯器寫 Python,,請把一個 tab 展開為 4 個空格

  • 絕對不要混用 tab 和空格,否則容易出現(xiàn) IndentationError

空格

  • 在 list, dict, tuple, set, 參數(shù)列表的 , 后面加一個空格

  • 在 dict 的 : 后面加一個空格

  • 在注釋符號 # 后面加一個空格,,但是 #!/usr/bin/python 的 # 后不能有空格

  • 操作符兩端加一個空格,,如 +, -, *, /, |, &, =

  • 接上一條,在參數(shù)列表里的 = 兩端不需要空格

  • 括號((), {}, [])內(nèi)的兩端不需要空格

行寬

每行代碼盡量不超過80個字符

理由:

  • 這在查看side-by-side的diff時很有幫助

  • 方便在控制臺下查看代碼

  • 太長可能是設(shè)計有缺陷

換行

Python支持括號內(nèi)的換行,。這時有兩種情況:

1) 第二行縮進到括號的起始處

foo = long_function_name(var_one, var_two,

var_three, var_four)

2) 第二行縮進4個空格,,適用于起始括號就換行的情形

def long_function_name(

var_one, var_two, var_three,

var_four):

print(var_one)

使用反斜杠\換行,二元運算符+,、 .等應(yīng)出現(xiàn)在行首,,并與上一行的.或=對齊,;或者縮進4個空格。長字符串也可以用此法換行

foo = variable_with_long_name \

+ another_variable \

+ variable

session.query(MyTable) \

.filter_by(id=1) \

.one()

this_is_a_very_long(function_call, 'with many parameters') \

.that_returns_an_object_with_an_attribute

print 'Hello, ' \

'%s %s!' % \

('Harry', 'Potter')

多個元素的list或者tuple,,在起始括號后換行,,第二行縮進4個空格

items = [

'this is the first', 'set of items', 'with more items',

'to come in this line', 'like this'

]

禁止復(fù)合語句,即一行中包含多個語句:

# yes

do_first()

do_second()

do_third()

# no

do_first();do_second();do_third();

if/for/while一定要換行:

# yes

if foo == 'blah':

do_blah_thing()

# no

if foo == 'blah': do_blash_thing()

空行

  • function 和 class 頂上兩個空行,;

  • class 的 method 之間一個空行,;

  • 不要使用太多的連續(xù)空行來區(qū)分代碼的邏輯塊

class A:

'''This is a simple docstring.'''

def __init__(self):

passdef hello(self):

passdef hello(name):

print 'Hello %s!' % name

def main():

pass

  • 可以使用多個空行分隔多組相關(guān)的函數(shù)

  • 函數(shù)中可以使用空行分隔出邏輯相關(guān)的代碼

表達式

空格

  • 一元運算符不加空格

  • 在二元運算符兩邊各空一格[=,-,+=,==,>,in,is not, and]:

# yes

exp = -1.05

i = i + 1

submitted += 1

x = x * 2 - 1

hypot2 = x * x + y * y

c = (a + b) * (a - b)

# no

exp = - 1.05

i=i+1

submitted +=1

x = x*2 - 1

hypot2 = x*x + y*y

c = (a+b) * (a-b)

  • 函數(shù)的參數(shù)列表中,,之后要有空格

# yes

def complex(real, imag):

pass

# no

def complex(real,imag):

pass

  • 函數(shù)的參數(shù)列表中,,默認值等號兩邊不要添加空格

# yes

def complex(real, imag=0.0):

pass

# no

def complex(real, imag = 0.0):

pass

  • 左括號之后,,右括號之前不要加多余的空格

# yes

spam(ham[1], {eggs: 2})

value = my_list[index]

# no

spam( ham[1], { eggs : 2 } )

value = my_list[ index ]

  • 字典、列表對象的左括號之前不要多余的空格

# yes

dict['key'] = list[index]

# no

dict ['key'] = list [index]

  • 不要為對齊賦值語句而使用的額外空格

# yes

x = 1

y = 2

long_variable = 3

# no

x = 1

y = 2

long_variable = 3

比較

  • 使用變量在左,,常量在右

  • 不顯示進行對True,、False的比較

  • 否定比較采用,foo not in bar的形式,,而不是not foo in bar

  • 使用instance(a, C)進行實例的類型檢查,,而不是type(A) is C

# yes

if method == 'md5':

passif not foo:

passif foo not in bar:

passif instance(a, C):

pass

# no

if 'md5' == method:

passif foo == False:

passif not foo in bar:

passif type(A) is C:

pass

引號

簡單說,自然語言使用雙引號,,機器標示使用單引號,,因此 代碼里 多數(shù)應(yīng)該使用 單引號

  • 自然語言 使用雙引號 '...'

    例如錯誤信息;很多情況還是unicode,,使用u'你好世界'

  • 機器標識 使用單引號 '...' 例如dict里的key

  • 正則表達式 使用原生的雙引號 r'...'

  • 文檔字符 使用三個雙引號 '''......'''

import語句

  • import語句應(yīng)該分行書寫

# yes

import os

import sys

# no

import sys,os

# yes

from subprocess import Popen, PIPE

  • import語句應(yīng)該使用 absolute import

# yes

from foo.bar import Bar

# no

from ..bar import Bar

  • import語句應(yīng)該放在文件頭部,,置于模塊說明及docstring之后,于全局變量之前,;

  • import語句應(yīng)該按照順序排列,,每組之間用空行分隔

import osimport sys

import msgpackimport zmq

import foo

  • 導(dǎo)入其他模塊的類定義時,可以使用相對導(dǎo)入

from myclass import MyClass

  • 如果發(fā)生命名沖突,,則可使用命名空間

import bar import foo.bar

bar.Bar()

foo.bar.Bar()

注釋

文件頭部注釋

在文件頭部指明文件編碼格式及開發(fā)者

# -*- coding: utf-8 -*-

'''

Author: Li Lei

Date: 2016-05-01

'''

塊注釋

#號后空一格,,段落間用空行分開(同樣需要#號)

# 塊注釋# 塊注釋## 塊注釋# 塊注釋

行注釋

至少使用兩個空格和語句分開,使用有意義的注釋

# yes

x = x + 1 # 邊框加粗一個像素

# no

x = x + 1 # x加1

docstring

docstring的規(guī)范在 PEP 257 中有詳細描述,,其中最其本的兩點:

  1. 所有的公共模塊,、函數(shù)、類,、方法,,都應(yīng)該寫docstring。私有方法不一定需要,,但應(yīng)該在def后提供一個塊注釋來說明,。

  2. docstring的結(jié)束'''應(yīng)該獨占一行,除非此docstring只有一行,。

'''Return a foobarOptional plotz says to frobnicate the bizbaz first.''''''Oneline docstring'''

命名規(guī)范

  • 應(yīng)避免使用小寫字母l(L),,大寫字母O(o)或I(i)單獨作為一個變量的名稱,,以區(qū)分數(shù)字1和0

  • 包和模塊使用全小寫命名,盡量不要使用下劃線

  • 類名使用CamelCase命名風(fēng)格,,內(nèi)部類可用一個下劃線開頭,;

    約定的縮寫保留原樣,例如使用HTTPWriter而不是HttpWriter

  • 函數(shù)使用下劃線分隔的小寫命名,,lowercase_with_underscores

  • 當(dāng)參數(shù)名稱和Python保留字沖突,,可在最后添加一個下劃線,盡量不是使用縮寫或自造的詞

  • 常量使用以下劃線分隔的大寫命名,,UPPERCASE_WITH_UNDERSCORES

  • 預(yù)先編譯過的正則表達式變量命名: name_re

MAX_OVERFLOW = 100

Class FooBar:

def foo_bar(self, print_):

print(print_)

函數(shù)和方法的參數(shù)變量命名:

  • 類方法: cls 作為第一個參數(shù).

  • 實例方法: self 作為第一個參數(shù).

  • 使用Lambda處理properties時用 x作為第一個參數(shù), 如 display_name = property(lambda x: x.real_name or x.username).

編碼

  • 文件使用UTF-8編碼

  • 文件頭部加入#-*-coding:utf-8-*-標識

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多