相信有不少同学都知道,当我们在使用IDE写一段程序的时候,如果我们的语法有错误,那么IDE就会相应的画出红线
(这里我们少了一个:)
那么是不是当我们的代码中没有红色的下划线,就代表没有任何错误呢?
emmm,其实在某种程度上可以这样说
当我们的代码没有红色下划线的时候,确实可以准确的运行起来
BUT
你觉得这样带着灰色下划线的代码好看吗?
最为一个强迫症患者,这根本不能忍啊!
这就是PyCharm中最著名的PEP8代码规范
下面我们就来看一下如何写出,不带下划线的优雅代码
缩进(indentation)
使用四个空格表示每个缩进级别。
规范操作:
# 使用开分隔符(opening delimiter)进行对齐
foo = long_func_name(var_one, var_two, var_three, var_four)
# 使用更多的缩进以和其他的代码单元区别开来# 如下例的,参数部分比函数体多四个缩进以和函数体进行区别def long_func_name( var_one, var_two, var_three, var_four) print(var_one)
# 悬挂缩进(hanging indents):增加一个缩进级别
foo = long_func_name( var_one, var_two, var_three, var_four)
# 或者:
foo = long_func_name( var_one, var_two, var_three, var_four)a = [1,2,3,4,5,6]a = [1,2,3,4,5,6]
不规范操作:
# 当不适用垂直对齐时,禁止在第一行使用参数# 换句话说,在垂直对齐时,才可在第一行使用参数foo = lone_func_name(var_one, var_two, var_three, var_four)
# 当缩进不足以区分代码结构时,增加一个缩进级别
deflong_func_name( var_one, var_two, var_three var_four):print(var_one)
最大行长度
所有行的最大长度均为79个字符。
withopen('')asfile_1, \
open('')asfile_2: file_2.write(file_1.read())
使用正确的换行位置。推荐的位置在二元操作符(binary operator,如下述代码中的、以及)之后,而不是在它们之前:
classRectangle(Shape):
def__init__(self,width,height,
color='black',emphasis=None,highlight=):
if(width ==andheight ==and
color =='red'andemphasis =='strong'or
height >100):
raiseValueError("sorry, you lose")
ifwidth ==andheight ==and(color =='red'oremphasisis None):
raiseValueError("I don't think so -- values are %s, %s"%
(width,height))
Shape.__init__(self,width,height,color,
emphasis,highlight)
空行
顶级函数(当前文件中的第一个函数)或者顶级类(当前文件的第一个类)之前要有两个空行
定义在类内部的函数(成员函数)之间要留有一个空行
可以使用额外的空行(但要注意节制)以区分不同的函数组,
在一堆只有一行的函数之间不要使用空行(比如一些函数的空实现)
在函数内部使用空行,来标识不同的逻辑单元
imports
在独立的行中导入不同的包
规范操作:
不规范操作:
import sys,os
但从一个包中添加不同的模块或者函数也是允许的:
fromsubprocessimportPopen, PIPE
import文件应当总是位于文件的首部,仅在模块备注和文档之后,在模块的全局变量和常量之前的位置
import文件的顺序:
1. 标准库(如sys、os)
2. 相关的第三方的库(如numpy、pandas、matplotlib)
3. 自定义的.py文件或者自定义的库
以组的形式标识上述三种import文件,也即是用一个空行隔开
推荐使用绝对路径包含,因为可读性更好,并且不易出错。
importmypkg.sibling
frommypkgimportsiblingfrommypkg.siblingimportexample
然而,外部的相对包含也是一种可接受的替换,尤其是处理复杂的包层次时,也即是绝对包含将造成不必要的繁琐。
from.importsibling
from.siblingimportexample# .表示当前路径
标准库不存在复杂的包层次关系,应当总是使用其绝对导入路径。
应当避免通配符导入文件
字符串
在python中,不对单引号和双引号作区分,PEP的代码规范也不对此有所推荐。任选其一,统一使用即可。然而,当一个字符串包含单引号或者双引号时,使用另外一种方式避免转义符()的使用,以提高可读性。
更多的规范可以查看PEP8的官方文档
https://www.python.org/dev/peps/pep-0008/#fn-hi
领取专属 10元无门槛券
私享最新 技术干货