用 Pythonic 方式来思考

1. 确认自己使用的 Python 版本

没啥好讲的,主要 Python 2 跟 Python 3 有一部分语法的区别。

2. 遵循 PEP8 风格指南

  1. 使用空格来表示缩进,而不要使用 tab
1
2
def foo():
pass
  1. 和语法有关的每一层缩进都用 4 个空格表示
1
2
def foo():
print("4 spaces")
  1. 每行的字符数不该超过 79 个
  2. 对于占据多行的长表达式来说,除了首行之外的其余各行都应该在通常的缩进级别上再加上四个空格
1
2
3
4
def foo():
print(1111111111111111111111111111, 1111111111,
"前面有 8 个空格", 222222
)
  1. 文件中的函数和类之间应该用两个空行隔开
  2. 在同一个类中,各个方法之间应该用一个空行隔开
1
2
3
4
5
6
7
8
9
10
11
12
class Cls():

def __init__():
pass

def foo():
pass


def foo():
pass

  1. 在使用下标取值的时候,不要在中括号两边加空格
1
print(ls_sample[1])
  1. 为变量赋值的时候,等号左右应当有且只有一个空格隔开
1
x = ls_sample[1]
  1. 函数、变量及属性名应该用长蛇命名: sample_name
1
2
sample_name = 1
self.sample_name = 2
  1. 类里面受保护的实例属性,命名开头应该是一个短下划线: _sample_name
1
2
3
class Cls:
def _sample_func(self):
self._sample_name = 1
  1. 类里面私有的实例属性,命名开头应该是两个短下划线: __sample_name
1
2
3
class Cls:
def __sample_func(self):
self.__sample_name = 1
  1. 类和异常的命名应当是大驼峰: SampleName
1
2
3
class SampleCls:
def foo():
SampleEror = ValueError()
  1. 模块级别的常量应当是全部大写字母拼写,然后单词之间用下划线: SAMPLE_NAME
1
SAMPLE_NAME = "SAMPLEvalue"
  1. 类中的实例方法(instance method),首个参数应该是 self,以表示对象自身
1
2
3
class Cls:
def foo(self):
self.x = 1
  1. 类方法(class method)的首个参数,应该命名为 cls,以表示该类本身
1
2
3
class Cls:
def foo(cls):
pass
  1. 采用内联形式的否定词,而不要把否定词放在整个表达式的前面,应该是 if a is not b 而不是 if not a is b
1
2
if a is not b:
pass
  1. 不要通过检测长度的方法判断 somelist 是否为 [] 或者 ‘’ 或者空值,应该采用 if not somelist 而不是 if len(somelist) != 0
1
2
3
ls = []
if not ls:
pass
  1. 检测 somelist 是否为 ‘[1]’ 或者 ‘hi’ 等非空值时,也应如此,if somelist 语句会默认的把值判断为 True
1
2
3
ls = [1]
if ls:
pass
  1. 不要编写单行的 if 语句,for 循环,while 循环及 except 语句,而应该把这些语句分成多行来书写,以示清晰
1
2
if True:
pass
  1. import 语句应该总是放在文件开头
1
2
3
4
5
import a

class Cls:
def foo():
pass
  1. 引用模块的时候,总是应该使用绝对名称,而不是应该根据当前模块的路径来使用相对名称。
1
from a import b
  1. 文件中的那些 import 语句应该按顺序划分成三个部分,分别表示标准库模块、第三方模块、自用模块。在每个部分中,各 import 语句应该按照模块的字母顺序排列
1
2
3
4
5
import time

import redis

import mymodule