Python常见编程规范总结

Pythonic定义

Python最常用的编码风格还是PEP8,详见:http://jython.cn/dev/peps/pep-0008/

Pythonic确实很难定义,先简单引用下《Python之禅》中的几句经典阐释:

优美胜于丑陋(Python 以编写优美的代码为目标)
明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
可读性很重要(优美的代码是可读的)

举个简单的例子,使用Pythonic风格编码的快速排序算法代码如下所示:

def quicksort(array):
    less = [];
    greater = [];

    if len(array) <= 1:
        return array
    pivot = array.pop()
    for x in array:
        if x <= pivot:
            less.append(x)
        else:
            greater.append(x)

    return quicksort(less) + [pivot] + quicksort(greater)

Pythonic代码风格

  • 交换两个变量

C语言代码如下:

 1 int a = 1, b = 2;
 2 int tmp = a;
 3 a = b;
 4 b = tmp;
 5
 6 //如果两个变量都为整数类型,当然也可使用:
 7
 8 int a = 1, b = 2;
 9 a = a^b;
10 b = a^b;
11 a = a^b;
12
13 //这样的形式,可以不用引入第三个变量

Pythonic代码如下:

1 a, b = b, a
  • Python可以灵活的使用迭代器,安全的关闭文件描述符,如下:
1 for i in alist:
2     do_sth_with(i)
3
4 with open(path, ‘r‘) as f:
5     do_sth_with(f)

Pythonic追求的是对Python语法的充分发挥,写出的代码带Python味儿,而不是看着向C或JAVA代码;

  • 不应过分使用技巧
1 a = [1, 2, 3, 4]
2 b = ‘abcdef‘
3 print a[::-1]
4 print b[::-1]

使用Python比较多的人可以比较容易看出其作用,就是输出逆序的a和b,但还是比较晦涩,Pythonic追求的是充分利用Python语法,上面代码可写为:

1 a = [1, 2, 3, 4]
2 b = ‘abcdef‘
3 print list(reversed(a))
4 print list(reversed(b))
  • 字符串格式化

我们很多人一般这样写,比较简洁:

1 name = ‘Tom‘
2 age = ‘20‘
3 print ‘Hello %s, your age is %s !‘ % (name, age)

其实,%s是比较影响可读性的,尤其是数量多了之后,很难清楚哪个占位符对应哪个实参,比较Pythonic的代码如下:

1 value = {‘name‘: ‘Tom‘, ‘age‘: ‘20‘}
2 print ‘Hello %(name)s, your age is %(age)s !‘ % value

使用%占位符的形式,依旧不是Python最推荐的,最具Pythonic风格的代码如下:

1 print ‘Hello {name}, your age is {age} !‘.format(name = ‘Tom‘, age = ‘20‘)

str.format()是Python最为推荐的字符串格式化方法;

  • 包和模块

包和模块的命名采用小写、单数形式,而且短小;

包通常仅作为命名空间,可以只包含空的__init__.py文件;

  • 过多的if...elif...elif......else...应使用字典来实现

 1 if n == 0:
 2     print "You typed zero..."
 3 elif n == 1:
 4     print "You are in top..."
 5 elif n == 2:
 6     print "n is even number..."
 7 else:
 8     print "Default value"
 9
10 # 使用字典来实现更好一些
11
12 def f(x):
13     return {
14         0: "You typed zero...",
15         1: "You are in top...",
16         2: "n is even number...",
17     }.get(x, "Default value")

编写Pythonic代码

避免劣化代码

  • 避免只用大小写来区分不同的对象;
  • 避免使用容易引起混淆的名称,变量名应与所解决的问题域一致;
  • 不要害怕过长的变量名;

代码中添加适当注释

  • 行注释仅注释复杂的操作、算法,难理解的技巧,或不够一目了然的代码;
  • 注释和代码要隔开一定的距离,无论是行注释还是块注释;
  • 给外部可访问的函数和方法(无论是否简单)添加文档注释,注释要清楚地描述方法的功能,并对参数,返回值,以及可能发生的异常进行说明,使得外部调用的人仅看docstring就能正确使用;
  • 推荐在文件头中包含copyright申明,模块描述等;
  • 注释应该是用来解释代码的功能,原因,及想法的,不该对代码本身进行解释;
  • 对不再需要的代码应该将其删除,而不是将其注释掉;

适当添加空行使代码布局更为优雅、合理

  • 在一组代码表达完一个完整的思路之后,应该用空白行进行间隔,推荐在函数定义或者类定义之间空两行,在类定义与第一个方法之间,或需要进行语义分隔的地方空一行,空行是在不隔断代码之间的内在联系的基础上插入的;
  • 尽量保证上下文语义的易理解性,一般是调用者在上,被调用者在下;
  • 避免过长的代码行,每行最好不要超过80字符;
  • 不要为了保持水平对齐而使用多余的空格;

编写函数的几个原则

  • 函数设计要尽量短小,嵌套层次不宜过深;
  • 函数申明应做到合理、简单、易于使用,函数名应能正确反映函数大体功能,参数设计应简洁明了,参数个数不宜过多;
  • 函数参数设计应考虑向下兼容;
  • 一个函数只做一件事,尽量保证函数语句粒度的一致性;

将常量集中到一个文件

Python没有提供定义常量的直接方式,一般有两种方法来使用常量;

  • 通过命名风格来提醒使用者该变量代表的意义为常量,如常量名所有字母大写,用下划线连接各个单词,如MAX_NUMBER,TOTLE等;
  • 通过自定义的类实现常量功能,常量要求符合两点,一是命名必须全部为大写字母,二是值一旦绑定便不可再修改;

 1 class _const:
 2
 3     class ConstError(TypeError): pass
 4     class ConstCaseError(ConstError): pass
 5
 6     def __setattr__(self, name, value):
 7         if name in self.__dict__:
 8             rasie self.ConstError, "Can‘t change const.%s" % name
 9         if not name.isupper():
10             raise self.ConstCaseError, "const name ‘%s‘ is not all uppercase" % name
11
12         self.__dict__[name] = value
13
14 import sys
15 sys.modules[__name__] = _const()

无论是用哪种方式,都应该将常量集中到一个文件中,便于维护管理;

时间: 2024-10-18 20:23:24

Python常见编程规范总结的相关文章

简明 Python 编程规范

赖勇浩(http://laiyonghao.com) 注:之前发布一篇<简明 Python 编程规范>(见:http://blog.csdn.net/lanphaday/article/details/2834883),本是我给当时所在的公司制定的,发表到博客的时候,对齐等问题都有一些错误,还包括一些错别字.到后来,我又有做过修正.大概在 2010 年 8 年,我又由 C++ 开发转到 Python 开发,便在那之前的基础上润饰和完善,形成第二版.前段时间 simple-is-better.c

Python编程规范(PEP8)

Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用的缩进方式是只是用空格. 当调用Python命令行的 -t 选项时,它会检测并警告代码非法混合使用制表符和空格.当使用 -tt 选项时,警告变成了错误. 最大行长度 限制所有行最长为79个字符. 使用反斜杠来分行是一个很好的选择. 我们应当选择在二元操作符之后进行分行,而不是之前. 空行 使用两行空

Python网络编程08----Django模版

模板系统基本知识 模板是一个文本文件(可以是HTML,XML,CSV等任何文本格式),同时包含了静态内容(例如HTML)和动态标记的逻辑,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档.使用哪个模版以及渲染什么数据是由视图函数本身(通过显式的渲染或者使用render_to_response)或者视图的参数(比如通用视图里的template_name参数)决

(转)Python PEP8 编码规范中文版

转:https://blog.csdn.net/ratsniper/article/details/78954852 原文链接:http://legacy.python.org/dev/peps/pep-0008/ item detail PEP 8 Title Style Guide for Python Code Version c451868df657 Last-Modified 2016-06-08 10:43:53 -0400 (Wed, 08 Jun 2016) Author Gui

Python PEP8 编码规范中文版-译自官网文件

写在前面(自补):初听PEP8一头雾水,不知所谓.啥是PEP8?为啥叫PEP8?PEP8是干啥的?-先了解下PEP吧. PEP是什么? PEP的全称是Python Enhancement Proposals,其中Enhancement是增强改进的意思,Proposals则可译为提案或建议书,所以合起来,比较常见的翻译是Python增强提案或Python改进建议书. 我个人倾向于前一个翻译,因为它更贴切.Python核心开发者主要通过邮件列表讨论问题.提议.计划等,PEP通常是汇总了多方信息,经过

Shell脚本编程规范与变量

主要内容 Shell脚本编程规范 Shell脚本应用场景 Shell编程规范 管道与重定向 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell脚本的概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限,便可运行 可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作 批量事务处理 自动化运维 服务运行状态监控 定时任务执行 编写第一个Shell脚本 1.编写脚本代码 使用vim文本编辑器,每行一条Linux命令, 按执行顺序依次编写:

理论:详细学习shell编程规范与变量————理论讲解 初学者一定要点进来

前言: shell脚本编程规范 shell脚本应用场景 shell编程规范 管道与重定向 shell脚本变量揭秘 自定义变量 特殊变量 本次学习了解的是变量 语言分为两大类 1.强语言:定义变量的时候需要声明数据类型,一旦声明,就不可变 jave c语言 1整型 init 1 2 3 100 长整型 long 2浮点型 单精度 float 4字节 双精度 double 8字节 带小数点就是浮点型 3.string 字符串 char 字符 英文字母字符 a 占一个字节 ? 中文汉字字符,男 占两个

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

python核心编程--笔记

python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   冗余输出(导入语句详细追踪) 1.5 –m mod 将一个模块以脚本形式运行 1.6 –Q opt 除法选项(参阅文档) 1.7 –c cmd 运行以命令行字符串心事提交的python脚本 1.8 file   以给定的文件运行python脚本 2 _在解释器中表示最后