社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何写出清晰又优雅的Python代码?我们给你这26条建议

CDA数据分析师 • 4 年前 • 351 次点击  


导读:Python Enhancement Proposal #8叫作PEP 8,它是一份针对Python代码格式而编订的风格指南。尽管只要语法正确,代码随便怎么写都行,但采用一致的风格可以使代码更易读、更易懂。如果你的代码风格和其他Python程序员的相同,那么就能够更加顺利地与大家一起做项目。


即便你的代码只给自己看,也应该按照这套风格来写,以便以后修改更加容易一些,而且能够避开很多常见的错误。

作者:布雷特·斯拉特金(Brett Slatkin)
来源:大数据DT(ID:hzdashuju)


PEP 8非常详细地描述了如何编写清晰的Python代码,而且会随着Python语言的发展持续更新。大家应该把完整指南阅读一遍:

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

笔者认为,下面这几条规则是绝对应该遵循的。


01 与空白有关的建议

(9条 / 26条)

在Python中,空白(whitespace)在语法上相当重要。Python程序员对空白字符的用法尤其在意,因为它们会影响代码的清晰程度。在这方面,大家应该遵循以下几条建议。

  1. 用空格(space)表示缩进,而不要用制表符(tab)。
  2. 和语法相关的每一层缩进都用4个空格表示。
  3. 每行不超过79个字符。
  4. 对于占据多行的长表达式来说,除了首行之外的其余各行都应该在通常的缩进级别之上再加4个空格。
  5. 在同一份文件中,函数与类之间用两个空行隔开。
  6. 在同一个类中,方法与方法之间用一个空行隔开。
  7. 使用字典时,键与冒号之间不加空格,写在同一行的冒号和值之间应该加一个空格。
  8. 给变量赋值时,赋值符号的左边和右边各加一个空格,并且只加一个空格就好。
  9. 给变量的类型做注解(annotation)时,不要把变量名和冒号隔开,但在类型信息前应该有一个空格。



02 与命名有关的建议

(7条 26条

PEP 8建议采用不同的方式来给Python代码中的各个部分命名,这样在阅读代码时,就可以根据这些名称看出它们在Python语言中的角色。遵循以下与命名相关的建议。

  1. 函数、变量及属性用小写字母来拼写,各单词之间用下划线相连,例如:lowercase_underscore
  2. 受保护的实例属性,用一个下划线开头,例如:_leading_underscore
  3. 私有的实例属性,用两个下划线开头,例如:__double_leading_underscore
  4. 类(包括异常)命名时,每个单词的首字母均大写,例如:CapitalizedWord
  5. 模块级别的常量,所有字母都大写,各单词之间用下划线相连,例如:ALL_CAPS
  6. 类中的实例方法,应该把第一个参数命名为self,用来表示该对象本身。
  7. 类方法的第一个参数,应该命名为cls,用来表示这个类本身。


03 与表达式和语句有关的建议

(6条 26条

The Zen of Python中提到:“每件事都应该有简单的做法,而且最好只有一种。”PEP 8就试着运用这个理念,来规范表达式和语句的写法。

  1. 采用行内否定,即把否定词直接写在要否定的内容前面,而不要放在整个表达式的前面,例如应该写if a is not b,而不是if not a is b
  2. 不要通过长度判断容器或序列是不是空的,例如不要通过 if len(somelist) == 0判断somelist是否为[]''等空值,而是应该采用if not somelist这样的写法来判断,因为Python会把空值自动评估为False
  3. 如果要判断容器或序列里面有没有内容(比如要判断somelist是否为[1]'hi'这样非空的值),也不应该通过长度来判断,而是应该采用if somelist语句,因为Python会把非空的值自动判定为True
  4. 不要把if语句、for循环、while循环及except复合语句挤在一行。应该把这些语句分成多行来写,这样更加清晰。
  5. 如果表达式一行写不下,可以用括号将其括起来,而且要适当地添加换行与缩进以便于阅读。
  6. 多行的表达式,应该用括号括起来,而不要用\符号续行。



04 与引入有关的建议

(4条 26条

PEP 8对于怎样在代码中引入并使用模块,给出了下面几条建议。

  1. import语句(含from x import y)总是应该放在文件开头。
  2. 引入模块时,总是应该使用绝对名称,而不应该根据当前模块路径来使用相对名称。例如,要引入bar包中的foo模块,应该完整地写出from bar import foo,即便当前路径为bar包里,也不应该简写为import foo
  3. 如果一定要用相对名称来编写import语句,那就应该明确地写成:from . import foo
  4. 文件中的import语句应该按顺序划分成三个部分:首先引入标准库里的模块,然后引入第三方模块,最后引入自己的模块。属于同一个部分的import语句按字母顺序排列。

  • 提示:Pylint是一款流行的Python源码静态分析工具。它可以自动检查受测代码是否符合PEP 8风格指南,而且还能找出Python程序里的许多种常见错误。很多IDE(集合成开发环境)与编辑器,都包含这样的linting工具或者支持类似的插件。
    https://www.pylint.org/


要点

  • 编写Python代码时,总是应该遵循PEP 8风格指南。
  • 与广大Python开发者采用同一套代码风格,可以使项目更利于多人协作。
  • 采用一致的风格编写代码,代码的后续修改更容易。


关于作者:布雷特·斯拉特金(Brett Slatkin),Google首席软件工程师,他是Google Surveys的联合技术创始人,也是PubSubHubbub协议的共同创造者之一。此外,Slatkin还发布了Google的第一个云计算产品——App Engine。早在15年前,Slatkin就开始在工作中使用Python管理Google大量的服务器群。他拥有纽约哥伦比亚大学计算机工程专业学士学位。


本文摘编自Effective Python:编写高质量Python代码的90个有效方法》(原书第2版),经出版方授权发布。


 

推荐阅读


 

CDA课程咨询

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/113725
 
351 次点击