Python学习笔记:PEP8常用编程规范
PEP8编码规范是一种非常优秀的编码规范,也得到了Python程序员的普遍认可,如果实践中或者项目中没有统一的编码规范,建议尽量遵循PEP8编码规范,当然如果项目中已经有了自身的编码规范,应当优先遵循自身的编码规范,哪怕原先的代码风格在你看来很糟糕,也要尽量与源代码风格保持一致。
原文地址:https://blog.csdn.net/ratsniper/article/details/78954852,原文很详细,有代码示例和更多讲解,如果有足够时间,建议阅读原文,这篇笔记只是根据此文来整理了一些常用的点。
一、缩进和对齐
1.语法缩进:语法上的缩进使用4个空格(参数对齐等不一定要用4个空格),不要混用制表符与空格,Python2程序在命令行运行时,使用-t可以发出制表符与空格混用的警告,而使用-tt就会使这些警告变成错误提示了
2.行宽:代码行宽限制在79个字符(也可以是99个字符),文档和注释限制在72个字符
3.对齐:当圆括号、方括号和花括号中的元素需要换行时,元素应该垂直对齐,而且如果下一条语句需要缩进时,比如if的条件语句和要执行的代码块,这些换行的元素应该使用更多的缩进来区分下面的缩进
4.换行:代码换行时应该优先使用圆括号、方括号和花括号中的隐式续行,视情况使用反斜杠\来进行换行
5.二元运算符:在二元云算法的换行时推荐以二元运算符作为新行的开始
6.多条语句同行:即使是简单的语句,即使可以使用分号,但是不推荐写在同一行,比如再简单的if/for/while语句也应该分行写
二、空行
1.顶级定义:顶级函数和类定义的前后使用两个空行隔开
2.类方法:类中方法的定义使用一个空行隔开
3.逻辑分段:函数中的功能组和逻辑段使用空行来隔开(视情况灵活运用)
三、import语句
1.import *和from xxx import *:这种通配符星号的用法应该尽量避免使用
2.import xxx:这种语句有多个时,应该分开导入,不推荐使用import xxx, yyy
3.from xxx import x, xx:这种形式可以一次导入多个而不用分行
4.普通导入:导入应该在文档字符串和注释之后,在全局变量和常量定义之前
5.导入顺序:导入顺序应该是标准库,三方库,以及本地模块,且需要加空行分隔
6.导入路径:导入应该尽量使用绝对路径,或使用显式的相对路径也是可行的(如:from . import xxx),尽量避免隐式的相对路径
7.双下划线变量导入:在像__version__、__author__等模块级变量的导入应该在文档和注释之后,在import语句之前
四、空格
1.括号等之后的空格:避免紧跟在括号、中括号和大括号之后的空格,例如:func( list_[ 1 ], { 'age': 18 })。应该省去不必要的空格func(list_[1], {'age': 18})
2.逗号等之前的空格:避免紧跟在逗号、分号和冒号之前的空格,例如:a , b = b , a。应该省去不必要的空格a, b = b, a
3.切片中的空格:切片的冒号左右两边应该有相同的空格,切片的下标如果是数字或变量,建议冒号两边不用空格,如果下标是多个变量的表达式或者函数表达式,则建议冒号两边使用一个空格分隔
4.行尾的空格:避免在行尾添加空格,比如在换行符反斜杠\后有空格的话,那这个反斜杠\就不是换行符了,因为行尾是空格而不是反斜杠\
5.二元运算符:除了函数传参和函数指定默认值等特殊情况外,应该总是在二元运算符的两边添加一个空格,如果一个表达式有多个二元运算符(如:+-*/),那么高优先级的二元运算符两边不用空格,低优先级两边添加一个空格,如:x = a*b + c/d
五、注释
1.修改注释:修改代码时一定修改对应的注释,千万不要留下与代码不对应的,甚至是错误的注释,视情况甚至可以删掉注释也不留错误的注释
2.行注释:使用一个#和一个空格开始,并且与注释的代码具有相同缩进,如果需要使用行注释写多段意思的注释,可以使用一个空行注释(即这一行只有一个#)来分隔不同意思的段落
3.代码行之后的注释:应该与前面的代码间隔至少两个空格,然后也是以使用一个#和一个空格开始,但是这种注释应该尽量少用,不必要的话就不用
4.文档注释:应该为所有公共的模块、函数、类和方法编写文档注释,一般使用三个双引号写文档注释,且如果是单行注释,则结尾的三引号应该与注释内容同行,如果是多行注释,则结尾三引号应该单独一行
六、命名
1.旧代码:如果原有的代码与命名规范不一样,应该与原有代码保持一致
2.API:暴露的API或者给别人使用的API应该以使用场景来命名,而不是实现原理命名
3.首字母大写加下划线:这种命名风格不可取,比如Capitalized_Words_With_Underscores
4.单下划线开头:这种命名为弱“内部使用”指示器,即模块内非公有(“protected”),比如在使用from xxx import *语句时是是不会导入单下划线开头的对象的
5.单下划线结尾:这种命名风格是为了避免与Python内部关键字冲突的一种约定
6.双下划线开头:当在类中以双下划线开头定义时,调用它的时候会在前面加上“_ClassName”,如调用类A中的属性__a时,__a就变成了_A__a,这样子类就不可以随便调用这个属性了,可以认为它是“私有”的,但Python中没有“私有”的说法,因为依然可以通过A._A__a去访问属性
7.双下划线开头和结尾:为模块和系统级变量,比如__name__、__init__等,我们自己应该永远避免使用这种命名风格
8.单字符变量:永远要使用O(大写的O)、l(小写的L)和I(大写的I),因为有些字体中无法区分它们是数字0和1还是英文字母L和O
9.包名和模板名:使用简短全小写的名称,包名不建议使用下划线,模块名为了提高可读性可以使用下划线
10.c/c++扩展模块:使用c/c++编写的扩展模块需要在模块名称加一个下划线前缀,如:_socket
11.类名:首字母大写
12.异常名:异常一般也是类,所以首字母也是大写,如果异常确实是一个错误,那需要在类名后加上“Error”后缀
13.函数名:全小写,为了提高可读性也可以使用下划线,大小写混合的情况只限于为了与原来的代码兼容的情况
14.全局变量:只在模块内使用的全局变量和普通变量一样定义,但是需要注意使用“from xxx import *”的xxx模块中的全局变量应该使用单下划线开头防止内部接口或变量的对外暴露
15.实例变量:非公有方法和实例变量使用单下划线开头(“protected”),双下划线开头会触发Python的命名转换规则(在前面加上“_ClassName”)以避免和子类命名的冲突
16.常量:常量通常是模块级的,使用全大写和下划线配合
七、编程建议
1.字符(串)连接:尽量避免使用如str1 += str2或str1 = str1 + str2的方式连接字符(串),建议使用字符串方法join()方法来连接字符(串)
2.单例对象判断:在于如None这样的单例对象进行判断时,应该使用is None或者is not None来进行判断
3.自定义异常:自定义异常应该继承自Exception,而不是BaseException
4.try/except:在try中只填充可能出错的代码,不要一股脑把全部代码放进去
5.return语句:除非函数中没有return语句,如果函数中有return语句,那么在其他可能结束的情况也显示的使用return语句,如果其他情况确实没有值要返回(如运行到了函数结束处,却不需要返回任何值),也要使用return None显示指明
6.startswith/endswith:判断字符串开头前缀或结尾后缀时,使用字符串本身的startswith/endswith,不用字符串的切割来进行判断
7.对象类型的比较:对象类型的比较使用isinstance,而不是type
8.“空”值判断:对于空字符串、空列表、空字典等的判断,直接使用本身来进行布尔值判断,如空字符串使用if str1: pass,而不是if str1 == '': pass
Python学习笔记:PEP8常用编程规范的更多相关文章
- Python学习笔记之常用函数及说明
Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...
- Python学习笔记6 函数式编程_20170619
廖雪峰python3学习笔记: # 高阶函数 将函数作为参数传入,这样的函数就是高阶函数(有点像C++的函数指针) def add(x, y): return x+y def mins(x, y): ...
- [Python] Python学习笔记之常用模块总结[持续更新...]
作为一种极其简单的编程语言,Python目前成为了最炙手可热的几种语言之一.它不仅简单易学,而且它还为用户提供了各种各样的模块,功能强大,无所不能.有利必有弊,学习Python同样有困扰,其中之一就是 ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python学习笔记(七):面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- python学习笔记之常用模块(第五天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
- Python学习笔记——部分常用/特殊用法
1.使用*号来展开序列,*是序列展开,每个元素都当做一个参数.ls = (1, 2, 3);foo(ls),这样foo只有一个参数,就是ls这个列表本身foo(*ls), foo得到3个参数,分别为1 ...
随机推荐
- intellijidea课程 intellijidea神器使用技巧 4-1 重构
1 重构变量 shift + F6 将选中的变量以及用到该变量的部分全部修改 2 重构方法 Ctrl + F6 重构变量
- RNQOJ [stupid]愚蠢的矿工(树形依赖背包)
题意 题目链接 Sol 树形依赖背包板子题 树形依赖背包大概就是说:对于一个点,只有选了它的父亲才能选自身 把dfs序建出来,倒过来考虑 设\(f[i][j]\)表示从第\(i\)个节点往后背包体积为 ...
- mint-ui popup自动关闭
<template> <div class="hello"> <input type="text" v-model="n ...
- 《SQLServer删除重复数据的方法》
方法一: declare @max integer,@id integer open cur_rows fetch cur_rows into @id,@max begin set rowcount ...
- sharepoint2007就地升级2010系列(二)环境概述及升级前准备
环境介绍:1台2GB的虚机 现在是windows server 2008 sp2 X64 +SQL 2005+SQL2005 sp3+sharepoint2007+sharepoint2007SP2 ...
- SpringBoot的运行原理
SpringBoot关于自动配置的源码在spring-boot-autoconfigure-xxxxx.jar中 <源码解析> 查看当前项目中已启用的和未启用的自动配置的报告的三种方法: ...
- 解决javascript四舍五入不准确
function roundFixed(num, fixed) { var pos = num.toString().indexOf('.'), decimal_places = num.toStri ...
- centos7 mod_gearman 3.0.1 打包rpm
wget https://github.com/sni/mod_gearman/archive/v3.0.1.tar.gz -O /root/rpmbuild/SOURCES/mod_gearman- ...
- 使用ajax实现简单的带百分比进度条
需求:当进行文件上传保存等操作时,能在页面显示一个带百分比的进度条,给用户一个好的交互体验 实现步骤 JSP页面 1.添加table标签 <table id="load" w ...
- centos 7(1611)安装笔记
麻烦 前天我把双系统笔记本里的 deepin 的磁盘分区直接从 Windows 7 磁盘管理里格式化了,结果悲催了,开不了机了,显示: 我以为是 Windows 7 的引导没了,就进 PE 修复了 ...