python需要標準嗎?
如果沒有特殊的編碼要求,建議在文件頭部加一行# -*- encoding: utf-8 -*-標識,聲明文件的編碼方式,當然,程序文件的編碼要和聲明的編碼保持一致,使用UTF-8編碼。2. 縮進/空格/空行/換行等基本格式
縮進: 統一使用4個空格進行縮進。通常使用1個Tab鍵,但Tab鍵不一定使4 個空格鍵,所以有時候因此出錯。
行寬: 每行代碼盡量不超過80個字符,但不是嚴格要求80字符以內,可略微查過。如果代碼過長,說明代碼設計不太合理。除此之外也方便于在控制臺查看代碼以及通過對side-by-side的diff時有幫助。
引號:
自然語言字符串一般使用雙引號;
機器標示使用單引號,例如字典中的key;
正則表達式使用原生雙引號:r"...";
文檔字符串使用三個雙引號:"""......""",例如函數注釋,對函數參數、返回值的說明等;
空行:
模塊級函數和定義類之間空兩行
類成員函數之間空一行
例如:
class A:
def __init__(self):
pass
def hello(self):
pass
def main():
pass
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
(函數中可以使用空行分隔出邏輯相關的代碼)
空格:
在二元運算符兩邊各空一格[=,-,+=,==,>,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)
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
函數的參數列表中,,,#,;之后要有空格
例如
# 規范
def complex(real, imag):
pass
#不規范
def complex(real,imag):
pass
1
2
3
4
5
6
7
1
2
3
4
5
6
7
函數的參數列表中,默認值等號兩邊不要添加空格
# 規范
def complex(real, imag=0.0):
pass
# 不規范
def complex(real, imag = 0.0):
pass
1
2
3
4
5
6
7
1
2
3
4
5
6
7
左括號之后,右括號之前不要加多余的空格
# 規范
spam(ham[1], {eggs: 2})
# 不規范
spam( ham[1], { eggs : 2 } )
1
2
3
4
5
1
2
3
4
5
字典對象的左括號之前不要多余的空格
# 規范
dict['key'] = list[index]
# 不規范
dict ['key'] = list [index]
1
2
3
4
5
1
2
3
4
5
不要為對齊賦值語句而使用的額外空格
# 規范
x = 1
y = 2
long_variable = 3
# 不規范
x = 1
y = 2
long_variable = 3
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
換行:
Python 支持括號內的換行。這時有5種情況,如下:
(1)第二行縮進到括號的起始處
foo = long_function_name(var_one, var_two,
var_three, var_four)
1
2
1
2
(2)第二行縮進 4 個空格,適用于起始括號就換行的情
def long_function_name(
var_one, var_two, var_three,
var_four):
pass
1
2
3
4
1
2
3
4
(3)使用反斜杠\換行。二元運算符+ 、.等應出現在行末;長字符串也可以用此法換行
session.query(MyTable).\
filter_by(id=1).\
one()
print 'Hello, '\
'%s %s!' %\
('Harry', 'Potter')
1
2
3
4
5
6
7
1
2
3
4
5
6
7
(4)禁止復合語句。即一行中包含多個語句:
# 規范
do_first()
do_second()
do_third()
# 規范
do_first();do_second();do_third();
1
2
3
4
5
6
7
1
2
3
4
5
6
7
(5)if/for/while要換行。
例如if:
# 規范
if foo == 'blah':
do_blah_thing()
# 不規范
if foo == 'blah': do_blash_thing()
1
2
3
4
5
6
1
2
3
4
5
6
import語句
import 語句應該分行書寫,如:
# 規范
import os
import sys
from subprocess import Popen, PIPE
# 不規范
import sys,os
1
2
3
4
5
6
7
1
2
3
4
5
6
7
import語句應該使用 absolute import
# 規范
from foo.bar import Bar
# 不規范
from ..bar import Bar
1
2
3
4
5
1
2
3
4
5
import語句應該放在文件頭部,置于模塊說明及docstring之后,于全局變量之前
import語句應該按照順序排列,每組之間用一個空行分隔(也就是說同一類型的在一塊)
導入其他模塊的類定義時,可以使用相對導入
from myclass import MyClass
1
1
如果發生命名沖突,則可使用命名空間
import bar
import foo.bar
bar.Bar()
foo.bar.Bar()
很標準