1. Python式思维
Python有别于其他编程语言的特点就是它的简单,但简单的同时又不乏深度。正是因为Python的简单,所以在编写代码时反而要特别小心,尤其对于大的项目,很容易因为其简单导致写出来的代码变得异常复杂而臃肿。Python有个称之为Python禅道(Zen of Python)的理念,倡导的就是宁简勿繁。
在本章,你会学到一些让你的Python代码变得更易读、更简洁的一些常用方法,其中一些技巧可能众所周知,另外一些技巧并没那么广为人知。那么,在现有的项目中,或者后续项目中,可以有意识的应用这些技巧,让你的代码变得质量更高。
使用Python,遵循Python禅道(Zen of Python)理念可以让你的代码更Python化,Python官方文档里推荐了很多让代码更简洁易读的实践做法,研读其中的PEP8有助于理解为什么会推荐这些编程实践。
1.1 编写Python式代码
Python官方称之为PEP8的文档约定了编写Python式代码的最佳实践,这些编程风格指南会持续保持更新,最新文档请参阅https://www.python.org/dev/peps/pep-008。
1.1.1 命名
本人作为程序员,使用过多种开发语言,如Java、NodeJS、Perl、Golang等,所有的这些语言都有自己对应的命名规范,包括变量、函数、类等等。本节会着重讨论编写Python代码中你需要遵循的命名规范。
1.1.1.1 变量和函数
函数和变量的命名推荐使用下划线分割的单词进行命名,以提高代码的可读性,如代码1-1:
当然,你还可以单下划线(_)或双下划线(__)作为变量的前缀,称之为免冲突(nonmangling:为避免和python自带的命名冲突所采用的一种方法)法的方式进行命名,如代码1-2所示:
推荐使用单下划线(_)作为类内部变量的前缀,用以标识改变量不允许在类外部进行访问,但这仅仅是个约定,Python本身并无法将这种形式的变量真正私有化。
Python对于函数的命名同样也有约定,如代码1-3所示:
对于私有函数,或者为避免与Python的内嵌函数命名冲突,也可以使用同变量命名的相同规则,如代码1-4所示:
除了遵循这些规则,另外很重要的一点,不要在变量或函数名称使用含义模糊的名字,而是要给命名赋予明确的含义。
让我们来看下面这个函数,通过所提供的用户ID,返回用户对象,如代码1-5所示:
在代码可以看到,第二个函数get_user_by,可以确保传递变量时使用相同的语境,从而让函数拥有了正确的上下文。而第一个函数get_user_info因参数id可代表任何含义,让函数的变得模凌两可。这个id是用户表的索引id,还是用户的账户id,还是其它的什么id?这种类型的代码会给其它开发人员使用你开发好的API造成很多困惑。因此,为解决这个问题,在第二个函数中做了两个改变:更改了函数名称和所传递的参数名,让代码变得更易读。当看到这个函数的时候,你立马会知道函数的目的以及函数所期望传入的参数。
作为开发人员,时刻牢记在给变量和函数命名的时候需要仔细斟酌考虑,让其他开发人员更容易看懂是你的重要职责。
1.1.1.2 类
和其它别的语言一样,Python类的命名需遵循驼峰命名法,如代码1-6中简单例子所示:
1.1.1.3 常量
常量命名应该使用大写字母,如代码1-7所示:
1.1.1.4 函数和方法的参数
函数和方法的参数需要遵循和变量及函数命名相同的规则。类方法第一个参数需使用self,其它方法不允许使用self作为参数,如代码1-8: