设为首页 收藏本站
查看: 752|回复: 0

[经验分享] Python最简编码规范

[复制链接]

尚未签到

发表于 2018-8-7 11:54:26 | 显示全部楼层 |阅读模式
  0、前言
  本文是阅读《Python Coding Rule》之后总结的最为精华及简单的编码规范,根据每个人不同喜好有些地方会有不同的选择,我只是做了对自己来说最简单易行的选择,仅供大家参考。
  1、重要原则
  a.保持风格的一致性很重要,但最重要的是:知道何时不一致
  b.打破一条既定规则的两个好理由:
  c.当应用规则会导致代码可读性下降(可读性赛高)
  d.为了和周围代码保持一致而打破规则(历史遗留)
  2、最简规范
  a.只使用空格缩进
  b.使用UTF-8编码
  c.每行只写一条语句
  d.使用行末反斜杠折叠长行,限制每行最大79字符
  e.导入包:每行唯一、从大到小、绝对路径
  f.类内方法空1行分隔,类外空2行分隔
  g.运算符除 * 外,两边空1格分隔,函数参数=周围不用空格
  h.除类名使用驼峰法以外,其他模块、函数、方法、变量均使用全小写+下划线
  i.1个前导下划线表示半公开,2个前导下划线表示私有,与保留字区分使用单个后置下划线
  j.开发时使用中文注释,发布时再写英文文档
  3、详细规范
  a.全文通用
  b.只使用空格缩进,4个空格表示1个缩进层次
  c.每行长度限制在79字符内,使用行末反斜杠折叠长行
  d.使用UTF-8编码
  e.每行只写一条语句
  4、代码命名
  一行只import一个包,Imports的顺序为:标准库、相关主包、特定应用,每组导入之间放置1行空行,所有导入使用包的绝对路径。
  分割顶层函数和类的定义使用2行空行,分割类内方法定义使用1行空行,class行与第一个方法定义之间要有1行空行。
  整体使用英文书写方式来使用空格,即仅在逗号、分号后面添加1个空格,其他任何符号如圆括号、方括号、花括号等都不用空格把符号与字符分开,写在一起表示一个整体;运算符除 * 号以外,其他符号两边都各用1个空格分隔;函数参数=号周围不用空格。
  模块名:不含下划线、简短、全小写;
  类名、异常名:首字母大写单词串的驼峰法;
  函数名、全局变量名、方法名、实例变量:全小写,加下划线增加可读性;
  一个前导下划线仅用于不想被导入的全局变量(还有内部函数和类)前加一个下划线)、不打算作为类的公共接口的内部方法和实例变量;
  两个前导下划线以表示类私有的名字,只用来避免与类(为可以子类化所设计)中的属性发生名字冲突。
  私有属性必须有两个前导下划线,无后置下划线;
  非公有属性必须有一个前导下划线,无后置下划线。
  公共属性没有前导和后置下划线,除非它们与保留字冲突,此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass。
  5、编写技巧
  与None之类的单值比较,永远用:'is'或'is not'来做:if x is not None

  在模块和包内定义基异常类(base exception>  使用字符串方法(methods)代替字符串模块。
  在检查前缀或后缀时避免对字符串进行切片,用startswith()和endswith()代替,如:No: if foo[:3] == 'bar':Yes: if foo.startswith('bar'):
  只用isinstance()进行对象类型的比较,如:No: if type(obj) is type(1):Yes: if isinstance(obj, int)
  判断True或False不要用 ==,如:No: if greeting == True:Yes: if greeting:
  6、注释
  开发时,注释全部用中文来写,当要发布脚本工具时,再写英文文档。
  注释应该是是完整的句子(短语也可),首字母大写;如果注释很短,省略末尾句号;注释块由一个or多个完整句子构成的段落组成,则每个句子使用句子结尾;句末句号后使用两个空格。
  注释块每行以#和一个空格开始,并且跟随注释的代码具有相同的缩进层次,注释块上下方有一空行包围。
  谨慎使用行内注释,至少使用两个空格与语句分开。
  使用 pydoc; epydoc; Doxgen 等文档化工具,为所有公共模块、函数、类和方法边写文档字符串,文档字符串对非公开的方法不是必要的,但你应该有一个描述这个方法做什么的注释,这个注释应该在"def"这行后。
  多行文档字符串结尾的""" 应该单独成行。
  版本注记:定义一个变量__version__ = "$Revision: 1.4 $"
  Stay hungry. Stay foolish.
  本文由马哥教育Python学员提供支持。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548181-1-1.html 上篇帖子: 最快的 Python Web 框架入门 下篇帖子: 理解python中的装饰器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表