PEP8

PEP8规则:


==================================================

代码布局:

 

缩进:

每级缩进使用4个空格。

python     -t         # 警告非法的tab和space   

python    -tt           #报错非法的tab和space

 

行宽:

限制所有行的最大宽度为79字符.
文档字符串或注释应该为72字符.

续航优先使用括号,其次使用续航符\.

 

空行:

函数和类的定义前面空2行。

类中的方法定义前面空1行。

不同的函数组合函数中不同的逻辑块可以使用额外的空行。

 

编码:

使用utf-8。

 

----------------------------------------------

括号中的垂直隐式缩进:

第一行有参数,对准左括号:

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)    # 4

 

------------------------------------------------

括号中的悬挂缩进:

第一行没有参数

 

调用时,缩进4个空格:

foo = long_function_name(

    var_one, var_two,    # 4

    var_three, var_four)    # 4

/)    # 右括号换行不用缩进

 

定义时,缩进 8个空格, 用于区别后续内容:

def    long_function_name(     
        var_one, var_two, var_three,    # 8
        var_four):    # 8

/)    # 右括号换行不用缩进

    print(var_one)    # 4


--------------------------------------------

if中的缩进:

if和(之间要空格, 括号中缩进8个空格。

if (this_is_one_thing

        and this_is_another_thing):   # 8

    do_something()   # 4

 

-------------------------------------------

列表的缩进:

my_list = [

    1, 2, 3,   # 4

    4, 5, 6,   # 4

]   # 0

 

-------------------------------------------

导入:

导入位置:在模块注释和文档字符串之后,在模块全局变量和常量之前。

导入顺序:标准库,第三方库,本地库。

使用绝对路径导入,一行只导入一个单位,不使用通配符导入。

 

import   name

from    name  import    subname1, subname2

 

=============================================================

字符串引用:

单引号和双引号一行的,三引号的使用双引号,避免在字符串中使用反斜杆。

‘string’

“string”

“””string”””

 

=============================================================

表达式和语句中的空格:

 

左括号后面和右括号前面不要空格:

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

 

逗号,分号,冒号之前不能有空格,之后有空格:

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

 

索引操作符中的冒号前后都不要空格:

ham[1:9:3], ham[:9:3] # : 前后都不要空格

 

函数调用的左括号前面不能有空格:

spam(1) # 函数名和(之间不能有空格

 

赋值等操作符不能因为对齐添加多个空格:

x = 1 # = 前后各一个空格

 

二元运算符两边要有空格:

i = i + 1 # +前后有空格

submitted += 1 # =+前后有空格

 

优先级高的运算符前后不要空格:

x = x*2 – 1   #   * 前后不要空格

c = (a+b) * (a-b)   # +/- 前后不要空格

 

关键字参数和默认值参数前后不要空格:

def    complex(real,    imag=0.0):   # =前后不要空格

    return    magic(r=real,    i=imag)   # =前后不要空格

 

函数注释中,=前后要有空格,冒号:和->前面没有空格,后面有空格。

def    munge(input:    AnyStr):

def    munge(sep:    AnyStr   =    None):

def    munge()->    AnyStr   

 

不推荐使用复合语句,也就是多条语句写在一行上。

if/for/while有时候可以在同一行跟一小段代码,但不要跟多个语句,也不要换行。

if    foo   ==    ‘blah’:

    do_blan_thing()

do_one()

 

=============================================================

注释:

修改代码之前优先修改注释。

注释首字母大写,注释以#加一个空格开头。

尽量不要用行内注释,也就是和语句在一行。

#    Convert tabs to spaces (following thenormal Python rules)

#    and split into a list of lines:

 

文档字符串:

def    kos_root():

    “””Return the pathname of the KOS rootdirectory.”””

 

def    complex():

    “””Return a foobang

    Optional plotz says to frobnicate thebizbaz first.

    “””   # 单独一行

 

=============================================================

版本标签:

__version__ ="$Revision$"

 

=============================================================

命名约定:

b/B

lowercase/UPPERCASE

lower_case_with_underscores/UPPER_CASE_WITH_UNDERSCORES

CapitalizedWords    #首字母大写的混合大小写

mixedCase    #首字母小写的混合大小写

Capitalized_Words_With_Underscores    #带下划线的首字母大写

 

常量/实例常量和缩写词都大写: 

B

UPERCASE

UPPER_CASE_WITH_UNDERSCORES

私有的实例常量在前面加_单下划线。


变量/实例变量都小写:

b

lowercase

lower_case_with_underscores

私有的实例变量在前面加_单下划线。

 

下划线:

_single_leading_underscore   #类的私有属性,from M import * 不会导入单下划线开头的东西。只有本身和子类可以访问。

single_trailing_underscore_   #单下划线结尾,避免和python的关键字冲突。

__double_leading_underscore   #类的私有成员,只有本身可以访问。

__double_leading_and_trailing_underscore__   #不要使用。

 

不要使用单个的o和l,用于区别数字0和1。


模块名全部小写短名称,可用下划线:

lowercase_with_underscore

 

包名全部小写短名称,不用下划线:

lowercasewithoutunderscore

 

类和异常名首字母大写,异常需要在后面加Error:

class   CapWords(object):

class   CapWordsError(Exception):

 

函数名/方法名都是小写字母,可用下划线:

def   lowercase_with_underscore()

私有的方法名前面加_单下划线。

 

函数和方法的参数:

普通函数参数:lower_case_with_underscores。

def    instance_function(self, …)    #实例方法第一个参数是self。

def    class_function(cls, …)    #类方法第一个参数是cls。

 

=============================================================

编程建议:

 

None的比较用is/is not 不要用=:

if    foo   is    None/if    foo   is    not    None:

 

用is   not不要 not … is。

 

使用基于类的异常。

 

使用函数定义def代替lambda赋值给标识符。

 

异常类继承自Exception,而不是BaseException。

 

适当使用异常链。

 

python2中用raise    ValueError(‘message’)代替raise    ValueError, ‘message’。

 

捕获异常时尽量指名具体异常。

 

建议用as绑定异常名。

 

捕捉操作系统错误时,建议使用Python 3.3引入显式异常层次,支持内省errno值。

 

所有try/except子句的代码要尽可的少,以免屏蔽其他的错误。

 

本地资源建议使用with语句,以确保即时清理。当然try /finally语句也是可以接受的。

 

上下文管理器在做获取和释放资源之外的事情时,应通过独立的函数或方法。

 

函数或者方法在没有返回时要明确返回None。

 

使用字符串方法而不是string模块。

 

使用 startswith()和endswith()代替字符串切片来检查前缀和后缀。

 

使用isinstance()代替对象类型的比较。

 

空序列(字符串,元组,列表)为false。

 

字符串后面不要有大量拖尾空格。

 

不要用 == 进行布尔比较。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值