Python—PEP8规范

2023-11-17


Python思维导图: //app.siweidaotu.com/#R0652402e50522cf245e39f060f811bdd

介绍

  • Python创始人: Guido(吉多·范罗苏姆),出版过《Python风格指南》

  • 开发背景:提高组内自动化开发效率,避免重复开发,对组内各模块已开发的自动化 lib 库、

    case中常用的操作、以及其他工具的调用接口进行汇总,管理出 dspa 组内自动化case开发的基础库。

  • 语言:采用二进制工具进行编译。

  • 规范文档

    为了方便维护、他人阅读使用,整理出该编码规范文档。请大家开发时遵循本规范进行开发。

  • This document was adapted from Guido’s original Python Style Guido essay[2],with some additins from barry’s style guide[5]. Where there’s conflict, Guido’s style rules for the purposes of this PEP. This PEP may still be incomplete(in face, it may never be finished).

    本文档改编自Guido的最初的《Python风格指南》一文,并添加了一些来自《Barry‘s style guide》的风格指南[5]。在有冲突的地方,Guido的风格规则应该是符合本PEP的意图。这篇PEP也许仍然尚未完成(实际上,它可能永远不会结束)。

代码布局

  • Tab键还是用空格缩进

    Python里有 “用空格为荣,Tab为耻”,全用空格确实麻烦,所以这里不限定使用tab,可以全用tab也不会报错,切记不能混用

  • 行的长度:推荐长度在72个字节内,使用反斜杠'/'续行

  • 空行

    用两行分割顶层函数和类的定义。

  • 编码:UTF-8才是王道,#coding=utf-8为标准格式

  • 导入

    import 模块名,import 模块名 as 别名, from 模块名 import 具体函数;应该使用单行导入一个模块,不能导入两个import 模1,模2,除非from 模块 import 函数1,函数2这样就可以

    模块导入顺序

    1. Python内置模块

    2. 第三方库(使用pip 安装的库)

    3. 自定义的库

      并且每组的import用空行分割

空格

  • 以下地方不推荐使用空格

    1. 紧挨着圆括号,方括号和花括号。

    如:span( name [ 1 ] , { a : 1 } )改成:span(name[1], {a: 1})

    1. 紧贴在逗号、分号、冒号前的空格都得去掉

    如:if x == 1 : x , y : x , y = y , x 改成: if x == 1: x, y: x, y = y, x

    1. 紧贴着函数调用的参数列表前[]括号前的空格得去掉

    如:dict ['key'] = list [ 1 ]改成 dict['key'] = list[1]

    1. 紧贴在索引或切片下标开始的[]括号前的空格去掉

    如:dict ['key'] = list [ 1 ]改成 dict['key'] = list[1]

    1. 只能在赋值或其他运算符的符号两端用空格
    1:		x     = 1
    2: 		y     = 2
    3: 		z     = 3
    ----------------------
    改成:
    1:		x = 1
    2:		y = 2
    3:		z = 3
    

其他建议:

始终在这些二元运算符两边放置一个空格:赋值(=),比较(==,<,>,!=,<>,<=,>=,in,)

在算术运算符两端插入空格,使保持二元运算符两边空格保持一致。

	×:	a = 1+2
	×:	a = 1*2 + 3
	
	√:	a = 1 + 2
	√:	a = 1 * 2 + 3

不要用于指定关键字参数或默认参数值的“=”号两端使用空格,例如:

	×:	Foo(name = '林青霞', age = 23)
	√:	Foo(name='林青霞', age=23)

不要将多行语句写在一行上,虽然能够运行,但是代码不规范不建议使用。

	×:	if x == 1: print('不规范')
	√:	if x == 1:
			print('规范写法,建议使用')

注释

注释必须跟代码保持一致,修改代码时,建议先修改注释。

注释必须是完整的句子。

如果注释是一个句子或者短语,首字母必须大写。

如果注释很短,建议省略句末的句号。

注释块通常由一个或多个由完整句子构成的段落组成,每个句子应该以句号结尾。

注释请使用英文。

约定使用同一的文档化注释格式有助于良好的习惯和团队的进步。

注释块

多行注释前后空一行,并且保持注释标识在同一层次下,提高代码阅读性。

注释块中每行以’#'和一个空格开始(除非他是注释内的缩进文本)。

命名风格

注意点:

  1. 单下划线作为前导,如:_single_begin, 这是弱的内部使用标识,

    ​ 例如使用“from M import *”的时候不会导入;

  2. 单下划线作为结尾的,如:single_end_,这一般用于跟python关键词冲突。

  3. 双下划线前导,如:__double_begin,类私有名;

  4. 双下换线前导+结尾,如:__double_begin_and_and_,特殊对象或属性,存在于用户控制的命名空间中,如:__init____import__等。有时可以被用户定义,用于触发某个特殊行为,称为运算符重载。

应避免的名字

永远不要用:

  1. 小写字母“l”(小写的“L”)
  2. 大写字母“O”
  3. 大写字母“I”(大写字母“i”)

作为单字符的变量名,因为不利于跟数字“O”和“1”很好的区分开。

当要用小写字母“l”时,请用大写字母“L”代替。

模块名

模块应该是不含下划线的,简短的,小写的名字。

因为模块名被映射到文件名,有些文件系统大小写不敏感并且截短长名称,模块名被选为相当短是重要的—这在Linux上不是问题,但当代码传到Mac或Windows上就可能是个问题了。

类名

类名总是使用并遵守首字母大写、驼峰式写法的约定。

异常名

首字母大写、驼峰式写法

全局变量名

这个约定跟函数的约定差不多。

不想被导入的全局变量(还有内部函数和类)前面加一个下划线。

函数名

函数名应该小写、动宾短语,可能用下划线风格单词,这样可以增加可读性。如:open_file()

方法名和实例变量名

小写、动宾短语、下划线风格可以增加可读性。

单前导下划线仅用于不打算作为类的公共接口的内部方法。

双前导下划线表示“类私有的名字”,python把这些名字和类名连接在一起。

如果类Foo有一个属性名为 __a,它不能以 Foo.__a 访问,如果非要用到,可以通过

Foo.Foo_a 得到访问权。通常,双前导下划线应该只用来避免与类中的属性发生名字冲突。

设计建议

  1. **与像None之类的单值进行比较,应该使用:“is”或“is not”**

    当你本意是“if x is not None”时,对写成“if x”要小心,因为例如当你测试一个默认为None的变量或参数是否被设置为其他值时,这个其他值可能是一个布尔上下文中为假的值。

  2. 基于类的异常总是好过基于字符串的异常:

    模块和包应该定义它们自己的异常类,基类应该是内建的 Exception 类的子类。始终包含一个类的文档字符串。例如:

    class MessageError(Exception):
    	"""Base Class for error in the email package."""
    
  3. 使用字符串方法代替字符串模块

    因为字符串方法是非常的块。

  4. 在检查前缀或后缀时避免对字符串进行切片

    startswith() 和 endswith() 代替,因为他们更明确且错误更少,例:

    	×:	if foo[:3] == "bar":
    	√:	if foo.startswith('bar'):
    
  5. 对象类型的比较应该使用 isinstance() 代替直接比较类型。例:

    	×:	if type(obj) is type(1):
    	√:	if isinstance(obj, 类型
    
  6. 检查一个对象是否是字符串时,谨记它也可能是unicode字符串。

  7. 对序列(列表、元组、集合、字符串),判断空列表是否为false的事实,因此 if not seqif seqif len(seq)if not len(seq) 好。

  8. 书写字符串时不要依赖于有意义的后置空格,这种后置空格在视觉上不易辨别。

  9. No Chinese!包括注释,也请尽量使用英文。

  10. 自动化 case 中使用 python logging 模块设定日志级别打印日志,而不要大量使用 print 输出。

  11. Print时使用 “%s”、“%d” 等标准输出格式,请勿 str 和变量混合连接使用。

  • Python之禅
>>> import this
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python—PEP8规范 的相关文章

  • 备战金九银十: GitHub 上标星 46k+的《10 万字Java面试总结》,助你搞定面试官

    不论是校招还是社招都避免不了各种面试 笔试 如何去准备这些东西就显得格外重要 不论是笔试还是面试都是有章可循的 我这个有章可循 说的意思只是说应对技术面试是可以提前准备 运筹帷幄之后 决胜千里之外 不打毫无准备的仗 我觉得大家可以先从下面几
  • python tkinter 点击按钮选择文件,返回文件路径

    关于python tkinter 点击按钮选择文件 返回文件路径 这个方法我找了好几天 终于曲线救国实现了 首先分为两步 1 设计对话框选择文件 下面的代码搞了好几天 才发现全局变量的获取 必须放在root mainloop的最后 反正网上
  • MAC软件推荐(Java方向)

    MAC软件推荐 Tabby 终端控制工具 keka 解压工具 typora Markdown工具 QuickRedis Redis视图工具 UTM 虚拟机 Navicat Premium 数据库工具 Adobe Photoshop CC 2
  • Android-App的设计架构经验谈,终获offer

    前言 想要成为一名优秀的Android开发 你需要一份完备的知识体系 在这里 让我们一起成长为自己所想的那样 学算法真的很痛苦 虽然大数据现在很火 但找到适合自己定位的职业也未尝不是一种合理选择 投百度的经历非常坎坷 想写出来和大家分享一下
  • runtimeService 运行时服务组件

    在Activiti中 启动一个流程后 会创建一个流程实例 ProcessInstance继承Execution 两个都是接口 每个流程实例至少会有一个执行流 Execution 当流程实例没有流程分支时 一般情况下只会存在一个执行流 假设出
  • 计算机采用二进制每秒,计算机为什么采用二进制

    计算机为什么采用二进制 2018 09 12 电脑为什么要采用二进制计算 计算机中的一切计算都是用二进制进行的 平时我们用的十进制是逢十进一 二进制则是逢二进一 我们用的算盘事实上有两种用法 一种是十进制 一种是十六进制 算盘中代表 五 的
  • 嵌入式Linux下用C语言写后端接口——CGI实现

    文章目录 简介 实验环境 下载CGIC库源码 配置CGIC编译 测试CGI接口 编写一个简单的获取表单的CGI接口 测试login cgi CGIC接口API 简介 CGI Common Gateway Interface 公共网关接口 是
  • Python更改文件的编码格式

    Python更改文件的编码格式 import os from chardet universaldetector import UniversalDetector def change encode file change 2 type d
  • MySQL Flashback 闪回功能详解

    1 简介 mysqlbinlog flashback 闪回 用于快速恢复由于误操作丢失的数据 在DBA误操作时 可以把数据库恢复到以前某个时间点 或者说某个binlog的某个pos 比如忘了带where条件的update delete操作
  • FreeType简介及在vs2010的编译使用

    FreeType库是一个开源 高质量 可扩展 可定制 可移植的字体引擎 它提供统一的接口来访问多种字体格式文件 包括点阵字 TrueType OpenType Type1 CID CFF Windows FON FNT X11 PCF等 F
  • 2021.11.30 面试题

    1 请你介绍一下map的分类和常见的情况 java为数据结构中的映射定义了一个接口java util Map 它有四个实现类 分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对
  • simulink仿真 adc 采样ePWM输出例程

    新建文件夹并用matlab打开 写入这两个模块 配置 ADC 配置ePWM 不使能B 关了就行 其他的默认即可 配置烧录 连线 示波器接pwma1 和地 adc chanl1接 3 3v或者 0 3 3 都行 转化是 x 3 3 2 12
  • backtrace函数与assert断言宏封装

    这篇文章是在阅读 sylar 框架时 对断言宏的封装所做的总结 在实际开发中 我们经常会遇到一种境况 如果程序执行的不是我们想要的正确结果 需要程序立即中断执行 我们希望得到其有效的错误信息 比如其出现错误的函数 文件 代码行号 和参数文本
  • iOS App icon、启动页、图标规范

    原文 iOS App icon 启动页 图标规范 以下内容都是我在做App时通过自己的经验和精品的分析得来的 希望会帮助到你 但是有时个别情况也要个别分析 要活学活用 一 App Icon 在设计iOS App Icon时 设计师不需要切圆
  • 招募 AIGC 训练营助教 @上海

    诚挚邀请对社区活动感兴趣的你 成为我们近期开展的训练营助教 与我们共同开启这场创新之旅 助教需要参与 协助策划和组织训练营活动 协助招募和筛选学员 协助制定训练营的宣传方案 负责协调和组织各项活动 助教可获得 AIGC知识库 获得社区提供的
  • 服务器端Session、客户端Session和Cookie的区别

    1 Session其实分为客户端Session和服务器端Session 当用户首次与Web服务器建立连接的时候 服务器会给用户分发一个 SessionID作为标识 SessionID是一个由24个字符组成的随机字符串 用户每次提交页面 浏览
  • 微型小程序页面跳转加携带数据

    一 WXML中
  • 列表数据转树形数据 trees-plus 使用方法(支持typescript)

    trees plus Operations related to tree data Install npm i trees plus S Import import TreesPlus from trees plus Usage impo
  • 如何使用DLL函数动态加载-静态加载

    公司里的项目里用到加密解密 使用的是客户指定的DLL库来加密解密 开始 我按照以前的方法来使用DLL库 这里也介绍下吧 虽然网上很多 一般动态加载DLL的步骤如下 HINSTANCE DLL库实例名 LoadLibrary T DLL库名

随机推荐

  • 高德api 实现根据中文地址地图打点弹窗

  • diffusion models笔记

    ELBO of VDM Understanding 1 中讲 variational diffusion models VDM 的 evidence lower bound ELBO 推导时 53 式有一个容易引起误会的记号
  • Promethus(普罗米修斯)安装与配置(亲测可用)

    1 普罗米修斯概述 Prometheus 是由go语言 golang 开发 是一套开源的监控 报警 时间序列数 据库的组合 适合监控docker容器 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 自201
  • 字符串匹配算法0-基本概念

    字符串匹配的算法在很多领域都有重要的应用 这就不多说了 我们考虑一下算法的基本的描述 给定大小为 字母表 上的长度为n的文本t和长度为m的模式p 找出t中所有的p的出现的地方 一个长度为m的串p表示为一个数组p 0 m 1 这里m 0 当然
  • [前端系列第5弹]JQuery简明教程:轻松掌握Web页面的动态效果

    在这篇文章中 我将介绍jQuery的基本概念 语法 选择器 方法 事件和插件 以及如何使用它们来实现Web页面的动态效果 还将给一些简单而实用的例子 让你可以跟着我一步一步地编写自己的jQuery代码 一 什么是JQuery JQuery是
  • 【异步系列五】关于async/await与promise执行顺序详细解析及原理详解

    前段时间总结了几篇关于异步原理 Promise原理 Promise面试题 async await 原理的文章 链接如下 感兴趣的可以去看下 相信会有所收获 一篇文章理清JavaScript中的异步操作原理 Promise原理及执行顺序详解
  • 博客4:YOLOv5车牌识别实战教程:模型优化与部署

    摘要 本篇博客将详细介绍如何对YOLOv5车牌识别模型进行优化和部署 我们将讨论模型优化策略 如模型蒸馏 模型剪枝和量化等 此外 我们还将介绍如何将优化后的模型部署到不同平台 如Web 移动端和嵌入式设备等 车牌识别视频 正文 4 1 模型
  • 4.5 静态库链接

    4 5 静态库链接 一种语言的开发环境往往会附带语言库 language library 这些库通常是对操作系统API的包装 例如C语言标准库的函数strlen 并没有调用任何操作系统的API 但是很大一部分库函数都要调用操作系统API 例
  • 三目运算符优先级

    今天发表一个遇到的js的三元运算符优先级问题 如图 在解答这一题的时候 首先我们先理解什么是三元运算符 如名字一样是有三个操作数 语法 条件判断 结果1 结果2 如果条件成立 则返回结果1 否则返回结果2 在这里 三元运算符优先级是最低的
  • C语言实现TCP连接

    开发环境 TCP服务端 TCP UDP测试工具 开发环境 Linux 编程语言 C语言 TCP UDP测试工具工具的使用请自行百度 我们用这款软件模拟TCP服务端 效果展示 代码编写 include
  • bootstrap中container类和container-fluid类的区别

    近几天才开始系统的学习bootstrap 但马上就遇到了一个 拦路虎 container和container fluid到底什么区别 查了很多资料 看到很多人和我有同样的疑问 但是下面的回答一般都是一个是响应式一个宽度是百分百 说的好像是那
  • 【华为OD机试】斗地主之顺子(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • firefox 阻止此页面创建其他对话框的解决方法

    用Firefox操作弹出界面时总是遇到 firefox 阻止此页面创建其他对话框 点击确定后 控制台就会报错误 解决方法 1 在firefox里输入about config 2 在列表框里右键 gt 新建 gt 整数 3 输入选项名dom
  • Redis底层数据结构

    Redis简单介绍一下 Redis是一个开源的 使用C语言编写的 支持网络交互的 可基于内存也可持久化的Key Value数据库 有哪些数据结构 说起Redis数据结构 肯定先想到Redis的5 种基本数据结构 String 字符串 Lis
  • 日期类之运算符重载

    date h pragma once include
  • linux tcpdump抓包命令详解,tcpdump(抓包分析命令详解)

    TCPDump可以完全拦截网络上传输的数据包以提供分析 它支持对网络层 协议 主机 网络或端口的过滤 并提供逻辑语句 例如和 或不帮助您删除无用的信息 tcpdump抓包分析命令详解 tcpdump是一个用于截取网络分组 并输出分组内容的东
  • 如何成为一个牛逼的脚本小子日记之0x001-JAVA 代码审计 Top half (2023829-...

    如何成为一个牛逼的脚本小子日记之 0x001 JAVA 代码审计 Top half 2023 8 29 2023 9 1 此记录是在拥有一定的java基础下进行的 java基础类 反射 继承 filter servlet calssLoad
  • Springboot实现热部署

    所谓的热部署 比如项目的热部署 就是在应用程序在不停止的情况下 实现新的部署 而Springboot在我们每次修改完代码之后 可能只是修改下打印的信息 就得重新启动App类 这样太浪费时间 有没有一种修改完代码让程序自动重启的方法呢 答案是
  • DirectShow中的工具GraphEdit使用小结

    一 安装完Windows SDK 7 0或7 1后 在C Program Files Microsoft SDKs Windows v7 0 Bin下有32位的graphedt exe 及x64目录下有64位版本的graphedt exe
  • Python—PEP8规范

    Python PEP8规范 介绍 代码布局 模块导入顺序 空格 注释 注释块 命名风格 应避免的名字 模块名 类名 异常名 全局变量名 函数名 方法名和实例变量名 设计建议 Python思维导图 app siweidaotu com R06