Python中PEP8规范说明

CSDN路径:https://blog.csdn.net/zsh773992554/article/details/85249331

PEP8是Python的编码规范,其中心在于提高代码的可读性

    当然也需要根据实际业务考量:

        1.如果遵循反而可读性降低。

        2.因为历史原因等,遵循后与其他代码的规范不一样(当然也是一个去收拾别人的烂摊子的机会)。

        (所以编码的时候越是遵循规范,越会方便别人提高自己)

    规范条例:

    1.代码排版

            a.保持每行缩进使用4个空格

            注释:不能混用tab和空格,默认会全部转换为空格

            b.一行的最大长度为79个字符,(文档字符串或注释不超过72个字符)

            注释:窗口显示限制,默认换行会打断代码结构

            c.换行首选括号,再是反斜杠。换行点在操作符后敲回车

            d.顶层函数与类之间空两行,类方法之间空一行,函数内部不同逻辑段之间空一行

    2.文档排版

            a.Py2中默认编码ASCII或Latin-1,Py3中默认为UTF-8

            b.import导入时单独分开导入,from xx import xx,xx 可以多个导入

            c.导入位于文件的顶部:在模块注释和文档字符后,全局变量和常量前

            d.导入顺序:标准库 、 相关第三方库 、 本地库/自定义库,之间空一行,并配置相关的__all__说明书

            e.包导入时:尽量使用绝对路径,移植性和阅读性更高

    3.避免多余空格

            a.各种括号前不加空格

            b.逗号、分号或冒号前不加空格

            c.函数调用的参数列表的圆括号的开括号前,text(1)

            d.索引或切片的方括号的开括号前,list[1]

            e.在复制或其他语句的运算符周围,不要为了对齐使用多个空格

            f.算数运算符前后加空格:1 * 3 

            g.不在一个关键字参数或一个缺省参数值的 = 前后加一个空格:def text(real, imag=0)

            h.通常不推荐使用复合语句(一行多语句)

            i.if/for/while 块中,执行语句必须另起一行

    4.注释

            不好理解的注释,不如没有注释。

            如果是一个短语或句子,首字母大写(除标识符),以句号结尾,并且有两个空格

            使用英语注释,因为不同编码或其他等原因,中文容易出现乱码

            a.块注释:在一段代码前增加,以 # 开头跟一个空格。段落以# 的单行分隔

                # Description : this is text

                # 

                # Input : text

            b.行内注释:与语句间隔两个空格,起始于 #和一个空格

                x = x+y  # this is text

            c.文档字符串:对于模块,函数,类和方法进行注释说明,位于def 行之后 

                """ text()

                this is text()

                """

            d.版本注记:有Subversion、CVS、RCS等,在块注释后,其他代码之前,前后一个空行

                __version__ = "$Reviseson: asdqwe $"

                # $Source$

    5.命名风格

            a.大小写字母和下划线组成

            b.首字母大写缩进:所有字符用大写,HTTPServerError

            c.单下划线开始:表示内部使用的方法,不建议修改

            d.单下划线结束:用于避免与Python关键字或方法冲突

            e.双下划线开始:定义类中的属性,不能直接通过类名进行调取,而是类方法获取,或者是类名._类名__属性名进行获取,(一般不推荐使用)

            f.双下划线开始结束:永远不要自定义该类型的方法,用于内部的魔法方法

    6.命名规范

            a.特别注意"l"(小写l)、"I"(大写i)、"1"(数字1)、"0"(数字0),"O"(大写o),不作为单个变量名

            b.模块名:全小写并简短,可以使用下滑线

            c.包名:全小写并简短,不建议下滑线

            d.类名:首字母大写。内部类加上前导下划线

            e.异常名:沿用类名规则并以"Error"为前缀

            f.全局变量名:尽量只在模块内有效。实现为__all__或者是前缀一个下划线

            g.函数名:小写,可用下划线分隔

            h.方法名和实例变量:下划线分隔的小写字母,私有方法和实例变量前用单下划线

            i.常量:在模块级别定义,全大写和下划线分隔

            j.类的属性有三种作用域public、non-public与subclass API,类似Java中的public、private、protected。non-public属性前,前缀单下划线

            k.公有属性和保留字冲突时,在属性后加一个下划线,比缩写和拼写好

            l.如果属性不希望被子类继承时,用双下滑先开头,可以进行避免。但需要注意调取时的命名内容,类名._类名__属性名可以调用,或者是子类出现相同的类名和属性名,会有冲突

            m.类的实例方法第一参数为self,类方法第一参数为cls

    7.编码建议

            a.编码中考虑其他Python实现效率等问题,比如运算符'+'进行字符串拼接时,在CPython效率高,在Jython中非常低,所以使用.join()的方式

            b.在于None比较时,使用is优于'==',因为在Python中None是固定内存id,所以直接通过is判断效率更高

            c.使用复杂比较实现排序时,应用__eq__,__ne__,.....等效率更高,并且可以通过function.total_ordering()提供生成缺少的比较操作方法

            d.使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception

            e.抛出异常使用raise,并且捕获异常时不要单独只有except会捕获SystemExit和KeyboardInterrupt异常,使得难以中断并隐藏其他问题,其后续跟具体的异常类型,以及处理方式

            f.Try/except语句,限制try语句来减少必要代码的数量

                try:

                    value = collection[key]

                    except KeyError:

                    return key_not_found(key)

                else:

                    return handle_value(value)

                No:

                try:

                    # Too broad!

                    return handle_value(collection[key])

                except KeyError:

                    # Will also catch KeyError raised by handle_value()

                    return key_not_found(key)

            g.使用'.startswith()'和'.endswith()'而非字符切片去检测前缀或后缀

                Yes: if foo.startswith('bar'):

                No: if foo[:3] == 'bar':

            h.对象类型比较isinstance()优于type,注:在Python2.3中Unicode和str的基类一致

                Yes: if isinstance(obj, int):

                No: if type(obj) is type(1):

            i.判断序列(strings,lists,tuples)

                Yes: if not seq:

                        if seq:

                No: if len(seq)

                        if not len(seq)

            j.字符串不以空格结尾

            k.判断布尔值时,不使用"==",使用is

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

推荐阅读更多精彩内容