和其他编程语言不同,Python有一套独特的编码风格,掌握Python的编码风格对于编写优美的代码至关重要。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
本文是一篇快速了解Python编码风格的指南,了解Python编码风格将有助于写出清晰、一致、易懂的代码。
目录
-
简介
-
命名规则
-
是否使用空格?
-
一般准则
-
使用
autopep8
库
PEP简介
PEP是Python Enhancement Proposal的缩写。PEP是向Python社区提供信息或描述Python或其过程或环境的新特性的设计文档。
有大量的PEP列表涉及不同的Python相关主题,但本文将只关注PEP 8,它是涉及Python编码风格约定的指南。它的目的是通过定义一套命名规则、制表符与空格的用法、最大行长度等准则,使代码更易读和一致。
然而,请记住,这些并不是规则,有时不遵循某个特定的准则是有意义的,可以通过链接查看一个示例:A Foolish Consistency is the Hobgoblin of Little Minds(https://peps.python.org/pep-0008/#a-foolish-consistency-is-the-hobgoblin-of-little-minds)
命名规则
首先来看一个简单的例子。对这两个函数有什么看法?
def sumEvenNumbers(numbers):even_sum = 0for ListNumber in numbers:if ListNumber % 2 == 0:even_sum += ListNumberreturn even_sumdef sum_odd_nums(nums):OddSum = 0for n in nums:if n% 2 == 0:OddSum+= nreturn OddSum
如上所示,这个例子的最大问题是不一致。示例中有两个函数,一个是mixedCase
的,另一个是snake_case
的。在每个函数中定义的局部变量也有混合的命名方式。如果在一个大项目中,这种混合的不同的命名方式是不应该出现的。
这种情况的问题在于以下几个原因:
-
阅读代码的次数往往多于编写代码的次数,所以保持代码的简洁和易懂是很重要的。
-
在创建一个新的变量/函数/类时,可以少操心一件事,因为已经知道它应该是什么样子的,只需要想出一个描述性的名字。
-
当到处都是相同的命名模式时,写静态分析或自动化脚本会更容易。
由于这些原因,需要定义一些大家都能遵循的标准。
在PEP 8中,它为变量、类、函数和其他的推荐命名标准提供了一个准则。下面是其中的一些:
-
类:使用
CamelCase
风格(例如:class InputManager
)。 -
函数和变量:使用
snake_case
风格(例如:def sum_even_numbers(numbers)
或sum_even = 0
) -
方法:与函数相同,如果是一个非公开的方法,则使用一个前导下划线(例如:
def _calculate_intermediate_sum(self)
)。 -
常量:使用所有大写字母和下划线来分隔单词(例如:
MAX_WIDTH = 10
)
是否使用空格?
下一个内容是空格的使用与否。这一点纯属美学范畴。
使用空格:
-
在二元运算符(
=
,+=
,-=
,>
,>=
,<
,<=
,==
,等)的两侧留一个空格(例如:sum += 5
)。 -
在元组/列表中的逗号后使用一个空格(例如:
ages= [12, 13, 14]
,coordinates = (4, 3)
) -
在函数类型的提示中:在冒号后加一个空格,并在
->
的两边加一个空格(例如:def sum_even(nums: List) -> int:
) -
在函数签名中,当默认值与类型提示结合使用时,在
=
周围使用白色空格(例如,def draw(scale: int = 1) -> None:
)。
不使用空格:
-
不要添加额外的空格来对齐运算符。
-
在元组/列表中的逗号之前。
-
紧靠小括号、大括号或圆括号内。
-
避免尾部使用空格。
如下所示是一些好与坏的例子:
# 好例子
age = 20
social_security_number = 1111info[0] = (names[0], {'address': 'somewhere'})heights = [180, 178, 195]# 坏例子
age = 20
social_security_number = 1111info[ 0] = ( names[ 0 ], { 'address': 'somewhere' } )heights = [180 , 178 , 195]
一般准则
受限于篇幅,还有很多其他的准则本文仅简短提示一下内容(更详细的描述可以在PEP 8文档中找到)(https://peps.python.org/pep-0008/):
-
导入应该在单独的行中进行。
-
使用空格而不是制表符 (除非在代码库中已经使用了制表符,因为Python不允许混合使用空格和制表符)。
-
建议代码的最大行长为79个字符,注释或文档字符串为72个字符。
-
每个缩进级别使用4个空格。
使用autopep8
库
偶尔需要一些帮助,当涉及到遵循讨论过的标准时,首选库是autopep8
。这个工具会自动格式化Python代码以符合PEP 8风格指南,还可以指定格式化的程度以及在格式化时是否应该忽略一些规则 (由autopep8
修复的规则:https://pypi.org/project/autopep8/#features)。
安装它:
pip install autopep8
使用它:
autopep8 --in-place --aggressive <filename>
如果在Visual Studio Code
上开发,建议使用Python扩展中的自动格式化功能,当保存文件时,它会在文件上运行autopep8
。
只需要在VSCode settings.json
文件中添加几行代码。下面是一个示例片段:
"python.formatting.autopep8Args": ["--max-line-length=79","--ignore","E402"],"editor.formatOnSave": true,
推荐书单
《Python从入门到精通(第2版)》
《Python从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分23章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GUI界面编程、Pygame游戏编程、网络爬虫开发、使用进程和线程、网络编程、Web编程、Flask框架、e起去旅行网站、AI图像识别工具等内容。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。除此之外,该书还附配了243集高清教学微视频及PPT电子教案。
《Python从入门到精通(第2版)》【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《Python从入门到精通(第2版)》在线选购,本书作者:明日科技,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!https://item.jd.com/13284890.html
精彩回顾
《领略数学之美,使用Python创建分形图案》
《使用Python进行自动化录屏》
《轻松完成异步任务,一文搞懂Python Celery》
《ChatGPT插件使用攻略,解锁互联网新体验》
《使用Python轻松创建Flask API后台任务》
《使用ChatGPT API创建Python文档,竟然如此简单》
《16 个必知必会的 Python 技巧,助你高效编程》
微信搜索关注《Python学研大本营》,加入读者群
访问【IT今日热榜】,发现每日技术热点