Python PEP 8 代码风格指南

Python PEP 8 代码风格指南

  • 0. 引言
  • 1. 空白字符
  • 2. 命名
  • 3. 表达式和语句
  • 4. 导入
  • 5. Pylint工具
  • 6. 要点总结

0. 引言

Python增强提案#8,也称作 PEP 8,是关于如何格式化Python代码的风格指南。

你可以按自己的方式编写Python代码,只要符合有效的语法规则。

然而,使用一致的风格可以让你的代码更易于理解和阅读。

与更广泛的Python程序员社区共享统一的代码风格,有利于项目协作。

即便你是唯一阅读自己代码的人,遵守代码风格指南也会让以后的修改更加容易,并有助于避免许多常见错误。

PEP 8 提供了大量有关如何编写清晰Python代码的细节。

随着Python语言的发展,它也会不断更新。阅读一下在线的完整指南https://www.python.org/dev/peps/pep-0008/是值得的。这里有一些你应该确保遵循的规则。

1. 空白字符

在Python中,空白字符在语法上是有意义的。Python程序员对空白字符对代码清晰度的影响特别敏感。请遵循以下有关空白字符的指导原则:

  • 使用空格而不是制表符进行缩进。

  • 每一级语法上有意义的缩进使用四个空格。

  • 每行字符数不超过79个字符。

  • 长表达式换行续行时,应比正常缩进级别多缩进四个空格。

  • 文件中,函数和类应该用两个空行隔开。

  • 类中,方法之间应该用一个空行隔开。

  • 在字典中,键和冒号之间不加空格,如果值在同一行,则在值之前加一个空格。

  • 在变量赋值中,等号前后各留一个空格。

  • 对于类型注解,确保变量名和冒号之间没有空格,并在类型信息前加一个空格。

2. 命名

PEP 8 为语言中的不同部分建议了独特的命名风格。这些约定使得在阅读代码时很容易区分每个名称所对应的类型。请遵循以下有关命名的指导原则:

  • 函数、变量和属性应该使用小写单词加下划线的格式。

  • 受保护的实例属性应该使用以单下划线开头的格式。

  • 私有实例属性应该使用以双下划线开头的格式。

  • 类(包括异常)应该使用大写驼峰式命名。

  • 模块级常量应该使用全大写格式。

  • 类的实例方法应该将第一个参数命名为self,它引用该对象。

  • 类方法应该将第一个参数命名为cls,它引用该类。

3. 表达式和语句

Python之禅阐述:"应该有且仅有一种明确的方法来完成它。"PEP 8试图将这一风格规范编码为表达式和语句的指导原则:

  • 使用内联否定(if a is not b)而不是否定肯定表达式(if not a is b)。

  • 不要通过将长度与零进行比较(if len(somelist) == 0)来检查是否为空容器或序列(例如[]或’')。使用if not somelist,假设空值将被隐式计算为False。

  • 对于非空容器或序列(如[1]或’hi’)也是如此。如果somelist是非空值,则隐式为True。

  • 避免使用单行if语句、for和while循环以及except复合语句。将它们分布在多行以提高清晰度。

  • 如果无法将表达式写在一行,请用括号将其括起来,并添加换行和缩进以提高可读性。

  • 比起使用\换行符续行,更推荐将多行表达式用括号括起来。

4. 导入

PEP 8建议一些关于如何导入模块以及在代码中使用它们的指导原则:

  • 总是在文件顶部写入import语句(包括from x import y)。

  • 导入模块时始终使用绝对名称,而不是相对于当前模块自身路径的名称。例如,要从bar包中导入foo模块,应使用from bar import foo,而不是仅import foo。

  • 如果你必须进行相对导入,请使用显式语法from . import foo。

  • 导入应该按以下顺序分节:标准库模块、第三方模块、自己的模块。每个子部分应按字母顺序排列导入。

5. Pylint工具

Pylint工具(https://www.pylint.org)是一种流行的Python源代码静态分析器。Pylint提供了自动执行PEP8风格指南并检测Python程序中许多其他常见错误的功能。许多IDE和编辑器也包含了类似的lint工具或支持此类插件。

6. 要点总结

✦编写Python代码时请始终遵循Python增强提案#8 (PEP 8)风格指南。

✦与更广泛的Python社区共享统一的风格有利于与他人协作。

✦使用一致的风格可以让以后修改自己的代码更容易。

完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维篇SHELL脚本实战案例

统计出每个IP的访问量有多少? 检查是否提供了日志文件的路径作为参数。使用awk从日志文件的每行中提取第一个字段(假设这是IP地址)。使用sort对提取的IP地址进行排序。使用uniq -c统计每个唯一IP地址的出现次数。最后,使用sort -…

一次消谐器在电力系统中的作用分析

一次消谐器是一种专门用于消除电力系统中的高次谐波的装置。它通过实时监测和分析系统中的谐波成分,采用先进的滤波技术,将谐波分量从系统中滤除,从而保持电力系统的稳定运行。 一次消谐器的主要作用体现在以下几个方面: 1. 保护电…

复习斐波那契(用C++写)

或者这样写: 斐波那契数列 题目描述 斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1 1 1,接下来每个数都等于前面 2 2 2 个数之和。 给出一个正整数 a a a,要求斐波那契数列中第 a a a 个数是多少。 输入格式…

Java基础---IO流

1. File类 1.1 File的介绍 File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。 注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。 1.2 File类…

Python模块-基础知识

Python模块-基础知识 1.模块分类: (1)自定义模块: 如果你自己写一个py文件,在文件内写入一堆函数,则它被称为自定义模块,即使用python编写的.py文件 (2)第三方模块&…

python初始化二维数据

1.遇到的问题 突然不知道什么原因,想起来实现一个矩阵的乘法,于是用python代码实现一下。 def matrix_multiply():a [[1, 2], [3, 4]]b [[5, 6, 7], [8, 9, 10]]m, n len(a[0]), len(b)if m ! n:print(we need a column equal b row!)m, t len(a),…

javaSE练习题(一)

1、BMI是根据体重测量健康的方式。通过以千克为单位的体重除以以米为单位的身高的平方计算出BMI。下面是16 岁以上人群的BMI图表: 编写一个java程序,提示用户输人以磅为单位的体重和以英寸为单位的身高,然后显示BMI值。注意: 1磅是0.453592 37千克而1英寸…

【工具类】adb常用命令

1. adb常用命令 1. adb常用命令 1.1. 常用命令1.2. 命令解析1.3. 参考资料 为了描述方便,假设需要通过 adb 操作 android 系统,本机是 ubuntu 系统 1.1. 常用命令 上传下载,/data/log 目录是手机上的目录,~/Downloads/log 是…

9大变频电源模块的测试参数及其重要性

变频电源是将交流电经过交流-直流-交流变换,从而得到输出为正弦波的交流电,广泛应用于家电、电机、电脑设备、测试单位、航空等领域。变频电源测试是确保系统稳定运行的重要步骤。 变频电源测试的重要参数 1. 输出电压和电流 可用万用表、电流表或者示波…

解决 Jupyter Notebook 中没有显示想要的内核的问题

如果在 Jupyter Notebook 的 “Kernel” 菜单中没有显示你想要的内核(kernel),可能是因为该内核没有正确安装或配置到 Jupyter Notebook 中。在这种情况下,你可以尝试以下几个方法: 重新安装内核:首先&…

企业电脑如何管控(高效管控企业电脑的小技巧)

员工企业管理一直以来都是一个难题,难在人员多管理费劲。 因此高效管理一直都是企业最头疼的问题。 而使用一款软件辅助管理是很多企业发现的最有效的方法,如域智盾软件。 域智盾软件是一款专业的文件加密和数据安全软件,适用于各种企业和个…

C++异常处理

C异常处理 try和catch 在C中,try 是异常处理的关键字,用于定义一个代码块,该代码块中可能抛出异常。如果在 try 块中发生了异常,程序会立即停止当前块的执行,并查找与之匹配的 catch 块来处理异常。 下面是一个基本…

4.1 用源文件写汇编代码

汇编语言 1. 源程序 1.1 伪指令 汇编指令是有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行伪指令没有对应的机器指令,最终不被CPU所执行伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作 1.2…

【LeetCode每日一题】2312. 卖木头块(DFS记忆化搜索+动态规划)

文章目录 [2312. 卖木头块](https://leetcode.cn/problems/selling-pieces-of-wood/)思路1:用DFS进行记忆化搜索代码:思路2:动态规划代码: 2312. 卖木头块 思路1:用DFS进行记忆化搜索 1.要用DFS深度优先遍历每一种情况。在递归的同时,不断更…

【什么是Internet?网络边缘,网络核心,分组交换 vs 电路交换,接入网络和物理媒体】

文章目录 一、什么是Internet?1.从具体构成角度来看2.从服务角度来看 二、网络结构1.网络边缘1.网络边缘:采用网络设施的面向连接服务1.1.目标:在端系统之间传输数据1.2.TCP服务 2.网络边缘:采用网络设施的无连接服务2.1目标&…

unicloud快速上手,unicloud项目创建以及项目创建注意事项

uniCloud快速上手 本项目地址https://gitee.com/qayrup/unicloud-demo 创建unicloud项目 新建一个uni项目,并选择启用unicloud,选择阿里云或腾讯云 阿里云和支付宝云都支持一个月免费的云,如果只想体验啥的,可以选择这两个, 但是需要注意,支付宝云需要配置跨域,否则很多云函…

XCode升级错误:Command CompileC failed with a nonzero exit code 解决办法

升级完XCode之后,bulid失败,出现如下错误: 问题1: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunCommand Compi…

网络编程面试题

一、什么是IP地址 1.IP地址是主机在网路中的唯一标识,,当主机从一个网络切换到另一个网络时,会更改IP地址,同样的IP地址也是路由器进行路由选择的标识 2.IP地址的分类 IPV4:采用4字节无符号整数存储 IPV6&#xff…

【JVM】垃圾收集算法,垃圾收集器,调优,如何判断类是无用的类?对象一定分配在堆中吗?了解逃逸分析技术吗?

目录 垃圾收集算法 标记-清除 标记-复制 标记-整理 分代收集算法 垃圾收集器 CMS收集器 G1 收集器 Serial收集器 ParNew收集器 Parallel Scavenge 收集器 Serial Old 收集器 Parallel Old 收集器 引用类型总结 调优 调优命令 调优工具 调优参数 如何判断类是…

PPT好看配色

放几个链接!画图时候可以参考!转自知乎 Color Hunt ColorDrop 中国色 Flat UI Colors Coolors