python code style

内容:

        1、python 语言和风格规范

        2、Autopep8 配置

        3、参考资料

一、Python 语言规范

1、包、模块与导入

顺序:

        标准库imports

        相关第三方imports

        本地应用/库的特定imports

推荐:

        使用绝对路径导入

        分行写,而不是写入同一行,例如:

#yes

import os

import sys

from subprocess import Popen, PIPE

#no

import os, sys

避免:

        使用相对路径

        使用通配符*,容易造成命名含义不清

 2、异常使用

 推荐:

        1. 异常类应派生自Exception而不是BaseException

        2.抛出异常时,用raise ValueError('message')代替raise ValueError, 'message'

        3.尽量减少try/except块中的代码量

        4.使用finally子句来执行那些无论try块中有没有异常都应该被执行的代码

        5.捕获异常时,尽可能使用明确的异常,而不是用一个空的Except

 3、列表生成式

推荐:

        适用于简单情况. 每个部分应该单独置于一行

 避免:

        避免使用多重for语句, 复杂情况使用for循环

YES:`squares = [x * x for x in range(10)]

No:`result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]

4、Lambda函数

推荐:

        适用于单行函数. 如果代码超过60-80个字符, 最好还是定义成常规(嵌套)函数.

        对于常见的操作符,例如乘法操作符,使用 operator 模块中的函数以代替lambda函数. 例如, 推荐使用 operator.mul , 而不是 lambda x, y: x * y .

5、条件表达式

推荐:

        适用于单行函数. 在其他情况下,推荐使用完整的if语句.

6、if条件判断

        1.避免将一个布尔值与True/Fasle 做等值判断,如果你需要区分false和None, 你应该用像 if not x and x is not None: 这样的语句.

        2.避免与None做== 判断,应该采用is/is not

        3.使用is not操作符而不是not ... is, 前面可读性更好

        4.对于序列(字符串, 列表, 元组), 要注意空序列是false. 因此 if not seq: 或者 if seq: 比 if len(seq): 或 if not len(seq): 要更好.

        5.注意‘0’(字符串)会被当做True.

NO:

    if value1 == False

    if value2 == None

    if value3 is not None

YES:

    if not value1

    if value2 is None

    if not values is None

7、默认参数

        避免使用可变参数作为默认参数,如果函数修改了对象(例如向列表追加项), 默认值就被修改了

Yes:

def foo(a, b=None):

         if b is None:

             b = []

No:

def foo(a, b=[]):

def foo(a, b=time.time()):  # The time the module was loaded???

def foo(a, b=FLAGS.my_thing):  # sys.argv has not yet been parsed...

8、全局变量

        避免使用全局变量, 用类变量来代替. 但也有一些例外:

        脚本的默认选项.

        模块级常量. 例如: PI = 3.14159. 常量应该全大写, 用下划线连接.

        有时候用全局变量来缓存值或者作为函数返回值很有用.

        如果需要, 全局变量应该仅在模块内部可用, 并通过模块级的公共函数来访问.

9、空格、空行、行长度、缩进

        1.括号内不要有空格

        2.不要在逗号, 分号, 冒号前面加空格, 但应该在它们后面加(除了在行尾).

        3.参数列表, 索引或切片的左括号前不应加空格.

        4.在二元操作符两边都加上一个空格, 比如赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not).

        5.当’=’用于指示关键字参数或默认参数值时, 不要在其两侧使用空格

        6.使用2个空行来分隔最外层的函数(function)和类(class)定义,使用1个空行来分隔类中的方法(method)定义。

        7.行长度不超过80字符

        8.用4个空格来缩进代码

推荐:command+option+l 快捷键格式化代码,autopep8调整格式

注意:格式化时,注意格式化别人代码带来的影响

10、注释

        1.块注释:块注释的每一行都应该以#和一个空格开头。块注释中的段落应该用只含有单个#的一行隔开。

        2.行内注释:尽量少用行内注释。行内注释是和代码语句写在一行内的注释。行内注释应该至少和代码语句之间有两个空格的间隔,并且以#和一个空格开始。

        3.文档字符串:所有的公共模块,函数,类和方法都应该有文档字符串。详细规则:https://www.python.org/dev/peps/pep-0257/

        4.多行文档字符串以单行"""结尾,不能有其他字符

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.

"""

        5. 对于仅有一行的文档字符串,结尾处的"""应该也写在这一行

        6. TODO注释:开头处包含”TODO”字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么. 

# TODO(kl@gmail.com): Use a "*" here for string repetition.

# TODO(Zeke) Change this to use relations.

11、命名

Python之父Guido推荐的规范

12、文件和sockets

在文件和sockets结束时, 显式的关闭它.

推荐:

        使用“with”语句以管理文件:

with open("hello.txt") as hello_file:

        for line in hello_file:

                print line


二、pycharm配置autopep8

1、安装autopep8

         pip install autopep8

2、选择菜单「Pycharm」–>「Preferences」–>「Tools」–>「External Tools」–>点击加号添加工具

3、填写如下配置项,点击「OK」保存

Name:Autopep8 (可随意填写)

Tools settings:

    Programs:autopep8

    Parameters:--in-place --aggressive --ignore=E123,E133,E50 $FilePath$

    Working directory:$ProjectFileDir$

4、选择菜单「Tool」–>「Extern Tools」–>「Autopep8」即可使用autopep8自动格式化你的python代码了

三、参考资料

 https://google.github.io/styleguide/pyguide.html

 https://www.python.org/dev/peps/pep-0008/

 https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_rules/#lexical-scoping

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