Python开发编码规范

1.代码的缩进

  • 4个空格一个缩进层次,永远不要混用制表符和空格. 最流行的Python缩进方式是仅使用空格, 其次是仅使用制表符.
# 与左括号对齐
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# 用更多的缩进来与其他行区分
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# 挂行缩进应该再换一行
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

#在多行结构中的大括号/中括号/小括号的右括号可以与内容对齐单独起一行作为最后一行的第一个字符
my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
  • 行的最大长度,将所有行限制在最大79字符.
较长的代码行选择Python在小括号,中括号以及大括号中的隐式续行方式。
通过小括号内表达式的换行方式将长串折成多行。这种方式应该优先使用,而不是使用反斜杠续行。 
反斜杠有时依然很有用。比如,比较长的,多个with状态语句,不能使用隐式续行,所以反斜杠是可以接受的:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

  • 空行
    顶层函数和类的定义,前后用两个空行隔开。
    类里的方法定义用一个空行隔开。

  • 编码

不论什么情况使用 UTF-8 吧!

2.导入

  • 通常应该在单独的行中导入(Imports)
推荐: import os
     import sys
不推荐:  import sys, os

  • 导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。 导入应该按照以下顺序分组:
1.标准库导入
2.相关第三方库导入
3.本地应用/库特定导入 
你应该在每一组导入之间加入空行。

3.空格

紧跟在小括号,中括号或者大括号后。
Yes: spam(ham[1], {eggs: 2})
No:  spam( ham[ 1 ], { eggs: 2 } )

紧贴在逗号、分号或者冒号之前。
Yes: if x == 4: print x, y; x, y = y, x
No:  if x == 4 : print x , y ; x , y = y , x

然而,冒号在切片中就像二元运算符,在两边应该有相同数量的空格(把它当做优先级最低的操作符)。在扩展的切片操作中,所有的冒号必须有相同的间距。例外情况:当一个切片参数被省略时,空格就被省略了。 
推荐:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]

紧贴在函数参数的左括号之前。
Yes: spam(1)
No:  spam (1)

紧贴索引或者切片的左括号之前。
Yes: dct['key'] = lst[index]
No:  dct ['key'] = lst [index]

总是在二元运算符两边加一个空格:赋值(=),增量赋值(+=,-=),
比较(==,<,>,!=,<>,<=,>=,in,not,in,is,is not),布尔(and, or, not)。
如果使用具有不同优先级的运算符,请考虑在具有最低优先级的运算符周围添加空格。
有时需要通过自己来判断;但是,不要使用一个以上的空格,并且在二元运算符的两边使用相同数量的空格。 
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

在制定关键字参数或者默认参数值的时候,不要在=附近加上空格。 
推荐:
def complex(real, imag=0.0):
    return magic(r=real, i=imag)

不推荐:

def complex(real, imag = 0.0):
    return magic(r = real, i = imag)

4.注释

注释块 (Block Comments) 
注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次. 
注释块中每行以'#'和一个空格开始(除非他是注释内的缩进文本).
注释块内的段落以仅含单个'#'的行分割. 
注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段
的注释).

行内注释 (Inline Comments) 
一个行内注释是和语句在同一行的注释.行内注释应该谨慎适用.
行内注释应该至少用两个空格和语句分开. 它们应该以'#'和单个空格开始.

5.文档化

编写好的文档说明(也叫“docstrings”)的约定在PEP 257中永恒不变。

要为所有的公共模块,函数,类以及方法编写文档说明。非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后。

PEP 257 描述了写出好的文档说明相关的约定。特别需要注意的是,多行文档说明使用的结尾三引号应该自成一行,例如:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.
"""

6.命名约定

  • 应避免的名字

永远不要用字符`l'(小写字母el(就是读音,下同)), O'(大写字母oh),或I'(大写字母eye)作为单字符的变量名.
在某些字体中,这些字符不能与数字1和0分开.当想要使用'l'时,用'L'代替它.

  • 模块名

模块应该是不含下划线的,简短的,小写的名字.
因为模块名被映射到文件名, 有些文件系统大小写不敏感并且截短长名字

  • 类名
    几乎没有例外,类名总是使用首字母大写单词串(CapWords)的约定.

  • 异常名
    趋势似乎是倾向使用CapWords异常名.

  • Constants 常量
    常量通常定义在模块级,通过下划线分隔的全大写字母命名。例如: MAX_OVERFLOW 和 TOTAL。

  • 全局变量名
    这些约定与那些用于函数的约定差不多.被设计可以通过"from M import *"来使用的那些模块,应该在那些不想被导入的全局变量(还有内部函数和类)前加一个下划线).

  • 函数名
    函数名应该为小写,可能用下划线风格单词以增加可读性. mixedCase仅被允许用于这种风格已经占优势的上下文(如: threading.py) 以便保持向后兼容.

  • 方法名和实例变量
    与函数名类似

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 介绍 愚蠢的使用一致性是无知的怪物(A Foolish Consistency is the Hobgoblin ...
    slords阅读 1,977评论 0 2
  • 最近写python对于一些代码规范问题感觉有些地方自己还需要加强,翻阅很多文章,特此奉上官方中文翻译版以便日后查看...
    PeterPZ阅读 3,489评论 0 15
  • --< > 令人讨厌的小人物身上有着愚蠢的一致性 --(A Foolish Consistency is the ...
    LittleWizard阅读 3,231评论 0 4
  • 更新时间:2016/5/13 介绍 本文档所提供的编码规范,适用于主要的Python发行版中组成标准库的Pytho...
    超net阅读 5,862评论 0 15
  • python编写规范 一、说明二、内容1. 代码布局1.1 缩进1.2 表达式和语句中的空格1.3 行的最大长度1...
    V7hinc阅读 991评论 0 0