簡(jiǎn)明概述
簡(jiǎn)明概述
1、編碼
如無(wú)特殊情況, 文件一律使用 UTF-8 編碼
如無(wú)特殊情況, 文件頭部必須加入#-*-coding:utf-8-*-標(biāo)識(shí)
2、代碼格式
2.1、縮進(jìn)
統(tǒng)一使用 4 個(gè)空格進(jìn)行縮進(jìn)
2.2、行寬
每行代碼盡量不超過(guò) 80 個(gè)字符(在特殊情況下可以略微超過(guò) 80 ,但最長(zhǎng)不得超過(guò) 120)
理由:
這在查看 side-by-side 的 diff 時(shí)很有幫助
方便在控制臺(tái)下查看代碼
太長(zhǎng)可能是設(shè)計(jì)有缺陷
2.3、引號(hào)
簡(jiǎn)單說(shuō),自然語(yǔ)言使用雙引號(hào),機(jī)器標(biāo)示使用單引號(hào),因此 代碼里 多數(shù)應(yīng)該使用 單引號(hào)
自然語(yǔ)言 使用雙引號(hào) "..."
例如錯(cuò)誤信息;很多情況還是 unicode,使用u"你好世界"
機(jī)器標(biāo)識(shí) 使用單引號(hào) '...' 例如 dict 里的 key
正則表達(dá)式 使用原生的雙引號(hào) r"..."
文檔字符串 (docstring) 使用三個(gè)雙引號(hào) """......"""
2.4、空行
模塊級(jí)函數(shù)和類定義之間空兩行;
類成員函數(shù)之間空一行;
class A: def __init__(self): pass def hello(self): pass def main(): pass
可以使用多個(gè)空行分隔多組相關(guān)的函數(shù)
函數(shù)中可以使用空行分隔出邏輯相關(guān)的代碼
2.5、編碼
文件使用 UTF-8 編碼
文件頭部加入#-*-conding:utf-8-*-標(biāo)識(shí)
3、import 語(yǔ)句
import 語(yǔ)句應(yīng)該分行書寫
# 正確的寫法 import os import sys # 不推薦的寫法 import sys,os # 正確的寫法 from subprocess import Popen, PIPE import語(yǔ)句應(yīng)該使用 absolute import # 正確的寫法 from foo.bar import Bar # 不推薦的寫法 from ..bar import Bar
import語(yǔ)句應(yīng)該放在文件頭部,置于模塊說(shuō)明及docstring之后,于全局變量之前;
import語(yǔ)句應(yīng)該按照順序排列,每組之間用一個(gè)空行分隔
import os import sys import msgpack import zmq import foo
導(dǎo)入其他模塊的類定義時(shí),可以使用相對(duì)導(dǎo)入
from myclass import MyClass
如果發(fā)生命名沖突,則可使用命名空間
import bar import foo.bar bar.Bar() foo.bar.Bar()
4、空格
在二元運(yùn)算符兩邊各空一格[=,-,+=,==,>,in,is not, and]:
# 正確的寫法 i = i + 1 submitted += 1 x = x * 2 - 1 hypot2 = x * x + y * y c = (a + b) * (a - b) # 不推薦的寫法 i=i+1 submitted +=1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b)
函數(shù)的參數(shù)列表中,,之后要有空格
# 正確的寫法 def complex(real, imag): pass # 不推薦的寫法 def complex(real,imag): pass
函數(shù)的參數(shù)列表中,默認(rèn)值等號(hào)兩邊不要添加空格
# 正確的寫法 def complex(real, imag=0.0): pass # 不推薦的寫法 def complex(real, imag = 0.0): pass
左括號(hào)之后,右括號(hào)之前不要加多余的空格
# 正確的寫法 spam(ham[1], {eggs: 2}) # 不推薦的寫法 spam( ham[1], { eggs : 2 } )
字典對(duì)象的左括號(hào)之前不要多余的空格
# 正確的寫法 dict['key'] = list[index] # 不推薦的寫法 dict ['key'] = list [index]
不要為對(duì)齊賦值語(yǔ)句而使用的額外空格
# 正確的寫法 x = 1 y = 2 long_variable = 3 # 不推薦的寫法 x = 1 y = 2 long_variable = 3
5、換行
Python 支持括號(hào)內(nèi)的換行。這時(shí)有兩種情況。
1.第二行縮進(jìn)到括號(hào)的起始處
foo = long_function_name(var_one, var_two, var_three, var_four)
2.第二行縮進(jìn) 4 個(gè)空格,適用于起始括號(hào)就換行的情形
def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
使用反斜杠換行,二元運(yùn)算符+ .等應(yīng)出現(xiàn)在行末;長(zhǎng)字符串也可以用此法換行
session.query(MyTable).\ filter_by(id=1).\ one() print 'Hello, '\ '%s %s!' %\ ('Harry', 'Potter')
禁止復(fù)合語(yǔ)句,即一行中包含多個(gè)語(yǔ)句:
# 正確的寫法 do_first() do_second() do_third() # 不推薦的寫法 do_first();do_second();do_third();
if/for/while一定要換行:
# 正確的寫法 if foo == 'blah': do_blah_thing() # 不推薦的寫法 if foo == 'blah': do_blash_thing()
6、docstring
docstring 的規(guī)范中最其本的兩點(diǎn):
1.所有的公共模塊、函數(shù)、類、方法,都應(yīng)該寫 docstring 。私有方法不一定需要,但應(yīng)該在 def 后提供一個(gè)塊注釋來(lái)說(shuō)明。
2.docstring 的結(jié)束"""應(yīng)該獨(dú)占一行,除非此 docstring 只有一行。
"""Return a foobar Optional plotz says to frobnicate the bizbaz first. """ """Oneline docstring"""