Python笔记 | PEP 8 完善你的代码风格

再读PEP8

好久好久没有写代码了,PEP8已经快忘得一干二净。重新读一遍,然后记录下来。

一、代码布局

1.缩进

每个缩进都使用四个空格, 连续行的原则是要和下一行在观感上有明显的区分

连续行应该和对应的括号垂直对齐

# GOOD
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
# BAD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
foo = long_function_name(var_one, var_two,
    var_three, var_four)

或者在前面添加空格来和下一行区分

# GOOD
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)
# BAD!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

永远不要用tab缩进,如果用vim的话,在参数中记得加入,vim会自动把tab拆分成空格,现在大多文本编辑器和IDE都会支持这个功能。

set shiftwidth=4 

2. 行字符限制

每行最大字符数不超过79,但是一些团队会要求更长的限制,以便于代码阅读和维护。但是注释长度最好不要超过限制。

正确的运算符断行

income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

3. 关于空行

顶级函数和类的周围要有两个空行
类中的方法周围要有一个空行
使用空行来分割逻辑块

4.文件编码

文件编码
python内核文件中始终使用UTF-8编码
使用ASCII(python2) 和UTF-8(python3)不需要声明

5.import模块

如何Import 模块
不要一下导入两个模块
模块导入永远放在文件开头,紧接着模块注释和docstring
模块导入顺序如下:
1.标准库导入
2.第三方模块导入
3.本地模块导入

Yes: import os
     import sys
     from subprocess import Popen, PIPE
No:  import sys, os

二、字符串引号

不要混用单引号和双引号,保持一个习惯,要么一直用单引号,要么一直用双引号。
三引号字符串,总是使用双引号
三引号字符串,总是使用双引号
三引号字符串,总是使用双引号

三、表达式和语句中的空格

1.最烦人的怪癖

请避免以下情况的空格:

紧跟大小括号之后的空格

YES

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

NO

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

逗号之后,括回之前

Yes:

foo = (0,)

No:

bar = (0, )

括号,逗号,分号前面

Yes:

if x == 4: print x, y; x, y = y, x

No:

if x == 4 : print x , y ; x , y = y , x

但是,切片中为了清楚区分,冒号前后有时候可以加

YES:

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]

二元运算符,左右各一个

YES

x = 1
y = 2
long_variable = 3

NO:

x             = 1
y             = 2
long_variable = 3

保证代码可读性为主

YES

i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)

传参等号不要加空格(有时候会报错)

YES

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

NO:

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

别把代码塞到一行

NO:

if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

四、注释

时刻保证在代码改变的时候,优先修改注释!!!
注释应该是完整的句子,开头字母大写。除非开头是一个小写字母开头的标识符
在多句子的注释中,每一句结尾都应该有两个空格。除非是最后一句。
一定要用英文编写注释!!!!除非你百分之120确信你的代码不会被其他语言者阅读。

1.块注释

每一行用 # 加一个空格开始

2.行内注释

请保守的使用行内注释,如果不是十分必要不要乱加。看着乱。

3.文档字符串(Document String)

结束的三引号另起一行,如果是单行字符串就不必另起一行。

五、命名约定(Naming Convention)

1.避免出现的命名

永远不要用大写i和小写L,还有大写O作为变量名称。

2.包和模块的命名

小写,如果有必要可以加下划线增加可读性

3.类的命名

每个单词开头字母大写,比如CapWords

4. Exception类的命名

遵从类的命名规则,最后要加一个Error后缀

5.函数和变量命名

函数名小写,除非你所在的组织历史遗留的风格是mixedStyle这种风格的,不然不要这么用。当然,如果加下划线能够增加可读性可以加。

6.常量

常量全部大写,可加下划线,比如MY_CONSTANTS

六、一些编程的建议

用is not 替换not is

# YES
if foo is not None:

# NO
if foo not  is None:

用def 定义简单函数而不是lambda

# YES
def f(x): return 2*x

# NO
f = lambda x: 2*x

保持return 的一致性

# Yes
def foo(x):
    if x >= 0:
        return math.sqrt(x)
    else:
        return None

# No
def foo(x):
    if x >= 0:
        return math.sqrt(x)

使用.startswith() 和 .endswith()来检查开头和结尾,避免使用切片检查。

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

推荐阅读更多精彩内容