pep 8 规范的一些记录
一、pep8起源
龟叔创立Python的初衷里就有创立一个容易阅读的编程语言,所以亲自操刀写了pep8 代码规范,每个项目开始前都要有一个共识,就是自己的代码规范,pep8 就是一个很好的范本。
二、官网链接
https://www.python.org/dev/peps/pep-0008/
中文翻译链接
https://my.oschina.net/u/1433482/blog/464444
三、重要总结
一致性问题:
风格指南强调一致性。项目、模块或函数保持一致都很重要。
当遵循指南降低代码一致性,可读性的时候就不必强行修改。
代码布局:
缩进四个空格代替tab
行宽79个字符,文本长块72个字符
字符编码总是用UTF-8
导入模块:
导入时单行导入,开头导入,
顺序为标准库,本地库,第三方库,
尽量使用绝对路径,不用通配符导入,
空格:
括号内没有空格,
关键字参数和默认值参数的前后不要加空格
逗号,分号,冒号前无空格
运算符后有空格,
不推荐复合语句,一句一行
用英文写注释,及时更新注释,少用行内注释,文档字符串:为所有公共模块、函数、类和方法书写
命名:
最重要的原则
用户可见的API命名应遵循使用约定而不是实现。(不太明白)
命名风格
b(单个小写字母)
B(单个大写字母)
lowercase(小写串)
lower_case_with_underscores(带下划线的小写)
UPPERCASE(大写串)
UPPER_CASE_WITH_UNDERSCORES(带下划线的大写串)
CapitalizedWords(首字母大写的单词串或驼峰缩写)注意: 使用大写缩写时,缩写使用大写字母更好。故 HTTPServerError 比 HttpServerError 更好。
mixedCase(混合大小写,第一个单词是小写)
Capitalized_Words_With_Underscores(带下划线,首字母大写,丑陋)
首尾有下划线的情况:
_single_leading_underscore:(单前置下划线): 弱内部使用标志。 例如"from M import " 不会导入以下划线开头的对象。
single_trailing_underscore_(单后置下划线): 用于避免与 Python关键词的冲突。 例如:
Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore(双前置下划线): 当用于命名类属性,会触发名字重整。 (在类FooBar中,__boo变成 _FooBar__boo)。
__double_leading_and_trailing_underscore__(双前后下划线):用户名字空间的魔法对象或属性。例如:__init__ , __import__ or __file__,不要自己发明这样的名字。
命名约定规范
避免采用的名字
决不要用字符'l'(小写字母el),'O'(大写字母oh),或 'I'(大写字母eye) 作为单个字符的变量名。一些字体中,这些字符不能与数字1和0区别。用'L' 代替'l'时。
包和模块名
模块名要简短,全部用小写字母,可使用下划线以提高可读性。包名和模块名类似,但不推荐使用下划线。
模块名对应到文件名,有些文件系统不区分大小写且截短长名字,在 Unix上不是问题,但当把代码迁移到 Mac、Windows 或 DOS 上时,就可能是个问题。当然随着系统的演进,这个问题已经不是经常出现。
另外有些模块底层用C或C++ 书写,并有对应的高层Python模块,C/C++模块名有一个前置下划线 (如:_socket)。
类名
遵循CapWord。
接口需要文档化并且可以调用时,可能使用函数的命名规则。
注意大部分内置的名字是单个单词(或两个),CapWord只适用于异常名称和内置的常量。
异常名
如果确实是错误,需要在类名添加后缀 "Error"。
全局变量名
变量尽量只用于模块内部,约定类似函数。
对设计为通过 "from M import " 来使用的模块,应采用 __all__ 机制来防止导入全局变量;或者为全局变量加一个前置下划线。
函数名
函数名应该为小写,必要时可用下划线分隔单词以增加可读性。 mixedCase(混合大小写)仅被允许用于兼容性考虑(如: threading.py)。
函数和方法的参数
实例方法第一个参数是 'self'。
类方法第一个参数是 'cls'。
如果函数的参数名与保留关键字冲突,通常在参数名后加一个下划线。
方法名和实例变量
同函数命名规则。
非公开方法和实例变量增加一个前置下划线。
为避免与子类命名冲突,采用两个前置下划线来触发重整。类Foo属性名为__a, 不能以 Foo.__a访问。(执著的用户还是可以通过Foo._Foo__a。) 通常双前置下划线仅被用来避免与基类的属性发生命名冲突。
常量
常量通常在模块级定义,由大写字母用下划线分隔组成。比如括MAX_OVERFLOW和TOTAL。
继承设计
考虑类的方法和实例变量(统称为属性)是否公开。如果有疑问,选择不公开;把其改为公开比把公开属性改为非公开要容易。
公开属性可供所有人使用,并通常向后兼容。非公开属性不给第三方使用、可变甚至被移除。
这里不使用术语"private", Python中没有属性是真正私有的。
另一类属性是子类API(在其他语言中通常称为 "protected")。 一些类被设计为基类,可以扩展和修改。
谨记这些Python指南:
公开属性应该没有前导下划线。
如果公开属性名和保留关键字冲突,可以添加后置下划线
简单的公开数据属性,最好只公开属性名,没有复杂的访问/修改方法,python的Property提供了很好的封装方法。 d.如果不希望子类使用的属性,考虑用两个前置下划线(没有后置下划线)命名。
公共和内部接口
任何向后兼容的保证只适用于公共接口。
文档化的接口通常是公共的,除非明说明是临时的或为内部接口、其他所有接口默认是内部的。
为了更好地支持内省,模块要在__all__属性列出公共API。
内部接口要有前置下划线。
如果命名空间(包、模块或类)是内部的,里面的接口也是内部的。
导入名称应视为实现细节。其他模块不能间接访名字,除非在模块的API文档中明确记载,如os.path中或包的__init__暴露了子模块。
转载于:https://www.cnblogs.com/xinghuaikang/p/8486493.html
pep 8 规范的一些记录相关推荐
- PEP代码规范简单总结
PEP代码规范 1 当一个判断条件太长以致于要换行的时候,可以使用()将他们括起来,更好的可读性.()会隐式的将他们连接起来 if 'a' == 'bba' and 'b' in ['bb','sds ...
- Python基础day01【软件安装、变量的定义和使用、数据类型、标识符和关键字、输入输出、数据类型转换、运算符、PEP 8 规范】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 学习目标: 能够说出计算机有哪两部分组成 能够说出操作系统的作用 能够说出编程语言的作用 ...
- Python学习22:Python之禅和PEP 8规范
笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章转载需注明,如果喜欢请点赞+关注,感谢支持! 导读:Python之禅和PEP 8规范,值得所有 ...
- 《计算机软件测试规范》学习记录
<计算机软件测试规范>学习记录 第一次做记录,比较丑,见谅.纯手打笔记到有道云,仅供参考,参考数据未<计算机软件测试规范>笔记并不做商用,如有侵权,请联系删除,分享一下链接ht ...
- 阿里巴巴编码规范 java认证记录
记录一下个人的考试题目,答案没有全对,提供题目给大家参考交流,如有发现错误,留言我改正即可,谢谢! 我始终相信互相学习才是进步的捷径! 阿里巴巴开发规范1.4版点击下载 单选1.KV结构的集合,在处理 ...
- python编码规范手册-Python官方竟然给出了一种编码规范PEP 8
写在之前 每个人都有自己的代码风格,随着写的行数增加,自己对于代码的审美也会变的不一样,这就像是一个逐渐蜕变的过程,每过一段时间回头再去看看自己之前写的代码就会生出一种「这么丑的玩意儿竟然是我写的」这 ...
- 走进PEP8——代码规范
最近一直在强调代码规范,但是有很多朋友不太清楚,我到底要怎么抒写代码,才算是规范呢? 所以,老Amy就在考虑,好记性不如烂笔头,反复强调不如一篇文章反复查阅.hhhh~ 那什么是代码规范呢?代码规范也 ...
- python 编码规范-命名规范
常见的命名规则 匈牙利命名法: 以一至多个小写字母表示其属性.类型,后接首字母大写的一至多个单词表示其作用描述. 比如 m_bCanRun,其中 m_ 表示其为成员变量,b 表示其类型为布尔值,Can ...
- python 编码规范 PEP8整理
我是用Python的IDE:pycharm来编写Python代码的,用IDE编写代码有一个好处就是语法高亮,智能提示.Python的代码样式规范称之为PEP 8规范,每次编写代码如果有出现不符合PEP ...
最新文章
- python 将数组中取某一值的元素全部替换为其他元素的方法
- GraphQL入门之什么是GraphQL?
- Linux 用户(user)和用户组(group)管理概述
- 避免Gson使用时将一些字符自动转换为Unicode转义字符
- 122. 买卖股票的zui佳时机 II(JavaScript)
- Spring-beans-ListableBeanFactory/AutowireCapableBeanFactory/HierarchicalBeanFactory
- 面积积分_新市民随迁子女积分入学指标调整 房产建筑面积每平方米积1分
- c语言 关键字符,c语言关键字有哪些 c语言关键字解释
- mysql物流管理系统_物流配送中心管理系统(SSM+MYSQL)
- 惠普1005打印机自检页_HP黑白激光打印机打印自检页的方法
- 怎么学计算机玩游戏,如何才能录制手机玩游戏的视频-电脑自学网
- 购买服务器 架设代理服务器 Android studio设置代理
- 3dmax和python做3d动画_3D动画和影视建模,用什么软件或者多个什么软件结合做比较好?...
- 奥运会-徐媛韩端建功 中国女足2-1胜瑞典迎开门红
- 复盘二: 了解自我和管理自我,诚惶诚恐,保持敬畏-- 宁向东的清华管理学课总结
- notes 常见问题
- 电子商务时代网络营销
- 程序语言编年史_Java的编年史和低延迟
- IData及DataQ使用心得
- 刷脸支付潮酷在年轻化的场景中颇受欢迎
热门文章
- 大额存款到期,银行不能给兑付怎么办?
- 银行利率是5.45%,房贷是4.9%,有钱该提前还房贷还是存款?
- 17年前存款11万,取款时银行以销户为由拒绝,法院判银行全额赔付
- 1000万存在银行,一年的利息够日常生活费吗?
- 网站搭建从零开始(三)域名解析
- oracle将查询结果声明为伪表,Oracle的伪列和伪表
- python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
- ajax刷新iframe页面,通过iframe实现简单的ajax表单提交
- 51Nod 蜥蜴和地下室(搜索)
- sqlserver 创建对某个存储过程执行情况的跟踪