首先,各个编程语言都有自己的代码规范,统一的代码规范,不仅能提高代码的可读性,还能提升代码的维护性,团队内部的集成也会更加顺畅,同时也能更轻易发现代码的问题。

团队编程的目标,所有人写的代码像一个人写出来的。

Python之禅

都说Python是一门优雅的语言,那就更少不了装饰和美化。Python在开发之初,已经规范了代码的整体原则,那就是Python之禅。

在交互式解释器中输入import this就会显示 Tim Peters 的 “The Zen of Python”

用python搭建禅道源码 python之禅_代码规范


当然,也可以在pycharm中:

import this
print()

放张高清大图:

用python搭建禅道源码 python之禅_用python搭建禅道源码_02

整体意思就是Python以优雅简洁为目标。具体翻译,大家可以参考下:

用python搭建禅道源码 python之禅_用python搭建禅道源码_03

编码规范

目前比较通用的是pep8规范,大家可以根据下方的官方文档进行学习,其中的PEP8Style Guide for Python Code,译为:Python代码样式指南。

pep8规范官网地址:https://www.python.org/dev/peps/pep-0008/,内容不少,大家没事可以去详细看看。

其中最值得初学者注意的就是代码布局了,养成良好的代码布局习惯,不仅自己看着赏心悦目,也能让将来的同行少掉两根头发because你那乱七八糟的代码。

然后就讲讲代码布局:

  • 缩进
  • 每个缩进级别使用4个空格。
  • 续行应使用在括号,方括号和花括号内使用Python的隐式线垂直对齐包装的元素,或使用悬挂式缩进 。使用悬挂式凹痕时,应考虑以下几点:第一行不应有任何论点,而应使用进一步的缩进来清楚地将其区分为延续行。
#与打开定界符对齐。
foo = long_function_name(var_one,var_two,
                         var_three,var_four)

#添加4个空格(额外的缩进级别)以将参数与其余参数区分开。
def long_function_name(
        var_one,var_two,var_three,
        var_four):
    print(var_one)

#悬挂的缩进应添加一个级别。
foo = long_function_name(
    var_one,var_two,
    var_three,var_four)

右边括号也可以另起一行。有两种格式,建议第2种。

# 右括号不回退,个人不推荐
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',
)
  • 制表符或空格
  • 空格是首选的缩进方法。
  • 制表符应仅用于与已经用制表符缩进的代码保持一致。
  • 在 list, dict, tuple, set, 参数列表的 , 后面加一个空格
  • 在 dict 的 : 后面加一个空格
  • Python 3不允许混合使用制表符和空格进行缩进
  • 最大行宽
  • 限制所有行的最大行宽为79字符
  • 文本长块,比如文档字符串或注释,行长度应限制为72个字符
  • 空行
  • function 和 class 顶上两个空行
  • class 的 method 之间一个空行
  • 函数内逻辑无关的段落之间空一行,不要过度使用空行
  • 不要把多个语句写在一行,然后用 ; 隔开
  • if/for/while 语句中,即使执行语句只有一句,也要另起一行
  • 导入在单独行(包)
  • 导入位置:在文件的顶部,在模块注释和文档字符串之后,在模块全局变量和常量之前
  • 导入顺序:标准库,相关的第三方库,本地库。各组的导入之间要有空行。
  • 禁止使用通配符导入:通配符导入(from import *)应该避免,因为它不清楚命名空间有哪些名称存,混淆读者和许多自动化的工具。
  • 括号里边避免空格
# 括号里边避免空格
#推荐
spam(ham[1], {eggs: 2})
# 不推荐
spam( ham[ 1 ], { eggs: 2 } )
  • 逗号,冒号,分号之前避免空格
if x == 4: print x, y; x, y = y, x
  • 函数调用的左括号之前不能有空格
# 推荐
spam(1)
dct['key'] = lst[index]

spam (1)
dct ['key'] = lst [index]
  • 赋值等操作符前后不能因为对齐而添加多个空格
x = 1
y = 2
variable = 3
  • 二元运算符两边放置一个空格
  • 涉及 =、符合操作符 ( += , -=等)、比较( == , < , > , != , <> , <= , >= , in , not in , is , is not )、布尔( and , or , not )
  • 优先级高的运算符或操作符的前后不建议有空格
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
  • 关键字参数和默认值参数的前后不要加空格
def complex(real, imag=0.0):
    return magic(r=real, i=imag)
  • 包和模块名
  • 模块名要简短,全部用小写字母,可使用下划线以提高可读性
  • 包名和模块名类似,但不推荐使用下划线
  • 避免采用如下名字
  • 决不要用字符’l’(小写字母el),‘O’(大写字母oh),或 ‘I’(大写字母eye) 作为单个字符的变量名。
  • 一些字体中,这些字符不能与数字1和0区别。用’L’ 代替’l’时。

一键排版

pycharm有个很好用的插件:CodeGlance

依次 File -> settings -> Plugins 搜索 CodeGlance 安装

用python搭建禅道源码 python之禅_Python_04


安装完后重启pycharm

也不需要干别的,你就只管敲代码,敲了一顿后发现代码好乱:(我这里随便敲两句举个例子)

用python搭建禅道源码 python之禅_代码规范_05

没关系,看见代码下面的灰色波浪线了吗,把鼠标放在上面,会出现提示:

用python搭建禅道源码 python之禅_Python_06


点击那个 Reformat file ,然后你会发现:

用python搭建禅道源码 python之禅_python_07


代码自动变工整了。

不过呢,由于我们上面说了,目前python大多遵守pep8规范,在这里也有一个与pep8相关的工具推荐给大家:

pip install autopep8

依次 File -> settings -> Tools -> External Tools,然后点击那个加号

用python搭建禅道源码 python之禅_代码规范_08


然后依次填写下面的配置:

autopep8(这是名字,可以随便写,建议写这个)

autopep8 

--in-place --aggressive --aggressive $FilePath$

$ProjectFileDir$

$FILE_PATH$\:$LINE$\:$COLUMN$\:.*

用python搭建禅道源码 python之禅_代码规范_09


配置完了就是这个样子:

用python搭建禅道源码 python之禅_python_10


使用方法有两种:

可以在最上面 Tools -> External Tools -> autopep8 规范代码

用python搭建禅道源码 python之禅_代码规范_11


也可以在左边文件栏右键当前文件,选择 External Tools -> autopep8 也可以对当前代码进行规范

用python搭建禅道源码 python之禅_代码规范_12


就这么多,OK!