和其他编程语言不同,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 = 0
for ListNumber in numbers:
if ListNumber % 2 == 0:
even_sum += ListNumber
return even_sum
def sum_odd_nums(nums):
OddSum = 0
for n in nums:
if n% 2 == 0:
OddSum+= n
return 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 = 1111
info[0] = (names[0], {'address': 'somewhere'})
heights = [180, 178, 195]
# 坏例子
age = 20
social_security_number = 1111
info[ 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电子教案。
购买链接:https://item.jd.com/13284890.html


精彩回顾
长按关注《Python学研大本营》,加入读者群 长按访问【IT今日热榜】,发现每日技术热点





