Python的pep8-代码规范

1、    代码布局设计

1.1    缩进

A、   使用四个空格来进行缩进

B、   换行的时候可以使用反斜杠,最好的方法是使用园括号,在使用反斜杠的时候,在反斜杠的后直接回车,不能有任何空格存在

比较好的做法如下:

对准开始的分隔符:

# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
             var_three, var_four)

包含更多的缩进表示是剩余部分:

# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

悬挂缩进应该添加一个级别:

# Hanging indents should add a level.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

比较差的做法如下:(代码同样是可以运行的)

# Arguments on first line forbidden when not using vertical alignment.—未使用垂直对齐
foo = long_function_name(var_one, var_two,
    var_three, var_four)
 
# Further indentation required as indentation is not distinguishable.(未使用缩进来表示每一层级)
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

对于续行来说,四个空格的缩进是可选的。

可选的如下:

# Hanging indents *may* be indented to other than 4 spaces.悬挂缩进的时候可以不是四个空格
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

当使用if语句的时候,如果条件恰好的缩进为四个空格空格,那么导致后面的语句的缩进也是四个空格,那么这种情况下是可以接受的,如下所示:

没有额外的缩进:

# No extra indentation.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

添加一个注释来进行分割缩进,做到语法高亮显示:

# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

在续行中添加额外的缩进:

# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

成对的小括号,中括号在多行的结构中可以写成多行,然后括号在第一个不为空白的位置结束。如下:

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )

或者对齐第一个字符的位置结束,如下:

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)

1.2 tab和空格的选择

关于tab的空格的选择,在python2中是可以混用的,但是在python3中,只能用一种风格。

1.3 最大行长度

行的最大长度为79个字符

在书写文档或者是注释的时候,行长度应该控制在72个字符。

反斜杠在有的时候是适用的,例如在参数很长,但是不能隐式的使用多行的时候,如下反斜杠的使用:

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())

确保在合适的时候将连续的行进行分开,最好的位置是操作符之后,而不是在操作符之前,如下:

class Rectangle(Blob):
 
    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

1.4 空行

Top level函数和类的定义的时候,空两行。

类中方法的定义空一行。

在函数中谨慎使用空行来表示相关的逻辑段。

无关的函数之间用一个空行进行分割。

1.5 源文件编码

在源文件中一直使用utf-8编码,在python2中使用ascll编码。

文件,在python2 中使用ascll编码,在python3中使用utf-8编码

1.6 导入

Import经常使用单独的行,如下:

import os
import sys

或者使用如下的方式:

§ from subprocess import Popen, PIPE

Import总是在文件的最上行,在模块的注释和docstring之后,在模块的全局变量之前。

Import可以按照以下顺序进行组织:

A标准类库import

B第三方import

C本地类库import

在每个组导入之后,可以用空行进行分割

把所有__all__相关类型的声明放在import之后

推荐使用绝对导入,可读性强,如下:

import mypkg.sibling

from mypkg import sibling

from mypkg.sibling import example

对于复杂的封装布局来说,相对导入也是可以接受的,主要是使用绝对导入的时候路径太长,如下:

from . import sibling

from .sibling import example

当导入一个类的时候,可以使用如下的方式:

from myclass import MyClass

from foo.bar.yourclass import YourClass

当以上的写法导致本地名称冲突,可以写成如下:

import myclass

import foo.bar.yourclass

并且使用"myclass.MyClass" and"foo.bar.yourclass.YourClass"。

在导入模块的时候,应该避免通配符的存在,如下:

from <module> import *

2、    字符串引号

在对于字符串的标示中,使用双引号还是单引号是没有区别的,主要就是两者混合使用从而避免反斜杠的出现。

3、    在表达式和语句中使用空格

3.1 避免使用空格情况

A. 在小括号,中括号,大括号中避免使用空格

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

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

B. 在逗号,分好,冒号之前不需要空格

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

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

C. 在切片的时候,避免使用空格,在扩展的切片中,必须使用相同的空格个数,如下所示:

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]

No:

ham[lower + offset:upper + offset]

ham[1: 9], ham[1 :9], ham[1:9 :3]

ham[lower : : upper]

ham[ : upper]

D.函数的左括号前不要添加空格:

Yes: spam(1)

No:  spam (1)

E. 中括号前不要添加空格

Yes: dct['key'] = lst[index]

No:  dct ['key'] = lst [index]

F. 操作符左右各一个空格,不要为了追求一致从而添加空格个数

Yes:

x = 1

y = 2

long_variable = 3

No:

x             = 1

y             = 2

long_variable = 3

3.2 其他建议

A. 避免在任何结尾添加空白。

B. 在下列操作符中左右各留空白

assignment ( = ), augmented assignment ( += , -= etc.), comparisons ( == , < , > , != , <> , <= , >= , in , not in , is , is not ), Booleans ( and , or , not )

C. 如果操作符优先级不同,注意在操作符左右留空白,特别是高优先级和低优先级的

i = i + 1

submitted += 1

x = x*2 - 1

hypot2 = x*x + y*y

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

No:

i=i+1

submitted +=1

x = x * 2 - 1

hypot2 = x * x + y * y

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

D. 在使用函数的时候,赋值和默认值之间不需要空格

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)

E. 不要将多语句写在同一行

Rather not:

if foo == 'blah': do_blah_thing()

for x in lst: total += x

while t < 10: t = delay()

Definitely not:

if foo == 'blah': do_blah_thing()

else: do_non_blah_thing()

try: something()

finally: cleanup()

do_one(); do_two(); do_three(long, argument,

list, like, this)

if foo == 'blah': one(); two(); three()

4、    注释

在修改的代码的时候,务必修改注释。

注释必须是英文,最好是完整的句子,首字母大写

4.1 块注释

在一段代码前增加注释,在#后添加一个空格,段落之间只有一个#作为行间隔

# Description : Module config.

#

# Input : None

#

# Output : None

4.2 行注释

在使用行注释的时候,在代码句子结束之后至少两个空格,然后用#开头后跟一个空格

x = x + 1                 # Increment x

But sometimes, this is useful:

x = x + 1                 # Compensate for border

在上面例子中,表示不要使用无效注释,主要是说明其目的

4.3 文档注释

在所有的公共模块,函数,类,方法中加入文档注释,这些注释写在def之后。

在进行多行注释的时候,注意“”“结束的时候,必须独占一行,如下:

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

当文档注释是一行的时候,确保开始的““”和“”“在同一行中。

5、    命名规范

使用单独的小写字母(b)

使用单独的大写字母(B)

使用小写字母(lowercase)

使用小写字母和下划线(lower_case_with_underscores)

使用大写字母(UPPERCASE)

使用大写字母和下划线(UPPER_CASE_WITH_UPPERCASE)

驼峰式写法(CamelCase):在使用缩写的时候,大写优于小写例如HTTPServer优于HttpServer

首字母大写,然后使用下划线是一种丑陋的写法

5.1 避免使用的名称

在写变量的时候,尽量避免小写的l和大写字母O和大写字母I,主要原因是容易和数字中1,0相混淆

5.2 包和模块名称

模块尽量使用简短的全部小写的名称,如果可以增加可读性那么可以使用下划线,python的包不推荐使用下划线,但是在引用其他语言写的扩展包中可以使用下划线来表示区分

5.3 类名称

类名称主要遵循为CapWords约定,表示为首字母大写

5.4 异常名称

异常归于类,从而也要遵循类名的规范,主要是在后缀上必须添加“Error“

5.4 全局变量名

全局变量只在模块类有效,和function命名相同

5.5 方法名称

方法名称全部为小写,下划线是可选的(在增加可读性的基础上使用)

5.6 方法变量

类的方法第一个参数总是self

类方法的静态变量总是为crs

如果一个方法的参数和保留字相冲突,那么在后面添加下划线进行区分

5.7 常量

常量命名全部使用大写,可以使用下划线进行分割

6、    编码建议

单独比较的时候使用is或者is not,不要使用==进行比较。

当实现比较的方法的时候,最好全部实现

__eq__ , __ne__ ,__lt__ , __le__ , __gt__ , __ge__ ),而不要单独实现一个。

使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如

Yes: if foo.startswith(‘bar’):优于

No: if foo[:3] == ‘bar’:

7 使用isinstance()比较对象的类型。比如
Yes: if isinstance(obj, int): 优于
No: if type(obj) is type(1):

Python的pep8(代码规范)相关推荐

  1. Python PEP8 代码规范常见问题及解决方法

    之前一直用 Python IDLE 写代码,最近换成 PyCharm 写代码总是会出现波浪号,这才了解到 Python 的 PEP8 代码规范,所以将常见的 PEP8 代码规范问题和解决方法记录一下, ...

  2. 走进PEP8——代码规范

    最近一直在强调代码规范,但是有很多朋友不太清楚,我到底要怎么抒写代码,才算是规范呢? 所以,老Amy就在考虑,好记性不如烂笔头,反复强调不如一篇文章反复查阅.hhhh~ 那什么是代码规范呢?代码规范也 ...

  3. 小学生都能学会的Python基础语法——代码规范判断语句循环语句

    前言: Python 语言与 Perl,C 和 Java 等语言有许多相似之处.但是,也存在一些差异,在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程. 一.代码的执行 ...

  4. Python 常用 PEP8 编码规范和建议

    目录 目录 代码布局 缩进 最大行宽 空行 模块导入 字符串 表达式和语句中的空格 注释 命名规则 编程建议 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPL ...

  5. Python代码规范(PEP8)问题及解决

    转载:https://blog.csdn.net/Jason_Lewis/article/details/75386598 最近刚刚接触Python,为了养成好习惯,尽量保证自己写的代码符合PEP8代 ...

  6. PEP8——Python代码规范

    统一且设计良好的代码规范,是一种优良的编程习惯. PyCharm这一Python IDE使用的正是著名的PEP8代码规范,我们会看到,当有不符合规范的代码出现时,编译器会以灰色下划波浪线给出相关提示, ...

  7. python解决实际问题的代码_Python代码规范问题及解决

    为了养成使用Python编程好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8 只是检测风格错误,而非编码错误! P ...

  8. PEP 8 -- Style Guide for Python Code。Python 代码规范。

    PEP 8 – Style Guide for Python Code 文章目录 PEP 8 -- Style Guide for Python Code 代码规范. PEP8 (pycodestyl ...

  9. 你写的Python代码规范吗?

    总第141篇/张俊红 1.什么是PEP8 PEP 是 Python Enhancement Proposals 的缩写,直译过来就是「Python增强建议书」也可叫做「Python改进建议书」,说的直 ...

最新文章

  1. LeetCode简单题之仅执行一次字符串交换能否使两个字符串相等
  2. ConcurrentHashMap源码解析(2)
  3. 016_Vue数组数据的响应式处理
  4. python面向对象(2)—— 继承(1)
  5. ant-design-pro使用服务器数据接口代理配置
  6. 软件行业渠道的价值在哪里?
  7. 北理计算机学院接受转专业条件,【知乎北理】在北理珠,我能转专业吗?
  8. matlab小波变换学习入门
  9. 阿里云:发短信工具类
  10. 库卡机器人emd价格_什么是机器人零点标定?以kuka机器人为例
  11. 键盘上特殊符号的中英文名称
  12. 源码深度解析系列之 Spring IOC
  13. R语言实战:预测钻石的价格
  14. NAT-DDNS内网穿透技术,解决动态域名解析难题
  15. MSP430F5438移植UC-OS经过
  16. 基于入度的拓扑排序(Kahn's Algorithm)
  17. uniapp使用阿里云多色图标
  18. LeetCode-SQL(六)
  19. 关于发那科机器人抓手及物料搬运阀配置
  20. TCP:当初取代NCP,如今害怕被取代

热门文章

  1. 数学分析_Tom Apostol_定理7.48:黎曼可积的充要条件
  2. 车联网也需要“走对路”,用户需求“导航”小度车载OS持续领先
  3. 微信公众号内测开放个人订阅号认证!
  4. android 自定义相册选择,Android图片选择器,支持拍照、从相册选择、裁剪、自定义主题...
  5. 日语语法(四):形容词
  6. 【论文笔记】Question Answering with Subgraph Embeddings
  7. php提交道不同,【后端开发】php引用和拷贝的区别
  8. C/C++中的序列点
  9. RK3288开发板PopMetal上的GPIO驱动实例
  10. 东华助手 v1.6.5