没有规矩,不成方圆。代码任何一种语言都有一些约定俗成的编码规范,Python也不例外。Python非常重视代码的可读性,对代码布局和排版有更加严格的要求。虽然一些大型软件公司对自己公司程序员编写的代码在布局、结构、标识符命名等方面有一些特殊的要求,但其中很多内容和思想是相通的,目的也是一致的。这里重点介绍Python社区对代码编写的一些共同的要求、规范和一些常用的代码优化建议,最好在开始编写第一段代码的时候就要遵循这些规范和建议。

(1)严格使用缩进来体现代码的逻辑从属关系。Python对代码缩进是硬性要求,这一点必须时刻注意。如果某个代码段的缩进不对,那么整个程序就是错的,要么是语法错误无法执行,要么是逻辑错误导致错误结果。

(2)每个import语句只导入一个模块,并且要按照标准库、扩展库、自定义库的顺序依次导入。另外,尽量避免导入整个库,最好只导入确实需要的对象。

(3)最好在每个类、函数定义后增加一个空行,在不同功能代码段之间增加一个空行,在运算符两侧各增加一个空格,逗号后面增加一个空格。按照这样的规范写出来的代码布局和排版比较松散,阅读起来更加轻松。不论是前面第一条讲的缩进,还是这里谈的空行与空格,主要是提高代码可读性,正如“The Zen of Python”所说“Sparse is better than dense.”、“Readability counts.”。稍微有点例外的是,在正常的赋值表达式中等号两侧都是各增加一个空格,但在调用函数并使用关键参数时一般并不在等号两侧增加空格。正所谓“张而不弛,文武弗能也;弛而不张,文武弗为也;一张一弛,文武之道也。”

(4)尽量不要写过长的语句。如果语句过长,可以拆分成多个短的语句,以保证代码具有较好的可读性。如果语句确实太长而超过屏幕宽度,最好使用续行符(line continuation character)“\”,或者使用圆括号将多行括起来表示是一条语句。

(5)对于复杂的表达式,建议在适当的位置使用括号使得各种运算的隶属关系和顺序更加明确,正如“The Zen of Python”所说“Explicit is better than implicit.”。

(6)对关键代码进行必要的注释。统计数据表明,一个可读性较好的程序中应包含大概30%以上的注释。在Python中有两种常用的注释形式:#和三引号。某行代码中“#”之后的内容将被看做是注释而不执行,三引号则常用于大段说明性文本的注释。

(7)在开发速度和运行速度之间尽量取得最佳平衡。内置对象运行速度最快,标准库对象次之,用C或Fortran编写的扩展库速度也比较快,而纯Python的扩展库往往速度慢一些。因此,在开发项目中,应优先使用Python内置对象、函数和类型,其次考虑使用Python标准库提供的对象,最后考虑使用第三方扩展库。然而,有时候只使用内置对象和标准库对象的话,很可能无法直接满足需要。这时候我们有两个选择,一是使用内置对象和标准库对象编写代码实现特定的逻辑,二是使用特定的扩展库。至于如何取舍,最终还是取决于业务逻辑的复杂程度和对速度的要求这两者之间的平衡。

(8)根据运算特点选择最合适的数据类型。如果定义一些数据只是用来频繁遍历而不需要进行增加、删除或修改操作,最好优先考虑元组或集合。如果需要频繁地测试一个元素是否存在于一个序列中并且不关心其位置,就尽量采用字典或者集合,因为列表和元组的in操作时间复杂度是线性的,而对于集合和字典却是常数级的,与问题规模几乎无关。

(9)充分利用逻辑运算符关系运算符以及逻辑运算符and和or的短路求值特点,合理组织条件表达式中的多个条件,减少不必要的计算。

(10)充分利用生成器对象或类似迭代对象的惰性计算特点,减少对内存的占用,降低空间复杂度。

(11)尽量减少内循环中的无关计算,尽量往外层提取。

有很多成熟的工具可以检查Python代码的规范性,例如pep8、flake8等等。可以使用pip install -U pep8来安装pep8工具,然后使用pep8 test.py来测试test.py文件中Python代码的规范性,pep8常用的可选参数有--show-source、--first、--show-pep8等等。也可以使用pip install pylint安装Python代码检查工具pylint,然后使用命令行工具pylint来检查程序的规范性,或者使用可视化工具pylint-gui来完成同样的任务。flake8结合了pyflakes和pep8的特点,可以检查更多的内容,优先推荐使用,使用pip install flake8可以直接安装,然后使用flake8 test.py即可检查test.py的规范性。

Python语言编程规范与优化建议相关推荐

  1. 华为c语言编程规范_C语言编程规范

    一.简介 代码编写规则应该在建立一个工程项目之前,应该贯穿整个项目的始终,以保证代码的一致性.采用标准的代码编写惯例,可以大大简化项目的维护负担.采用一种好的风格,以达到以下目的:可移植性.连贯.整洁 ...

  2. C语言编程规范 学习笔记

    C语言编程规范 一.代码总体原则 1.清晰 2.简洁 3.选择适合的风格,与代码原有风格保持一致 二.头文件 背景 术语定义 原则 2.1 头文件中适合放置接口的声明,不适合放置实现 原则 2.2 头 ...

  3. 嵌入式C语言编程规范

    前言 代码首先是给人看的,其次才是给机器执行的,因此一般情况下代码的可读性优先于性能,只有确定性能是瓶颈时,才需要主动优化. 可读性高的代码应当是易于理解并且易于实现的,代码越长越难看懂,可能出错的地 ...

  4. c语言编程规范总结,【技术小记 | C语言】C 语言编程规范

    image 欢迎大家访问我的个人博客:吴佳轶 | WuJiaYi,第一时间获取最新的文章. 规范制定说明 本套C语言编程规范为提高代码质量.便于维护.协同编码.可移植等特点而编写.要求所有参与编码人员 ...

  5. 【编程语言 | C语言】C 语言编程规范

    欢迎大家访问我的个人博客:吴佳轶 | WuJiaYi,第一时间获取最新的文章. 规范制定说明 本套C语言编程规范为提高代码质量.便于维护.协同编码.可移植等特点而编写.要求所有参与编码人员要严格遵循本 ...

  6. C语言代码示范与讲解+C语言编程规范及基础语法+编程实战

    上一篇文章:C语言程序设计概述+C语言简介+算法概述 C语言代码示范与讲解+C语言编程规范及基础语法+编程实战 一:代码示范集加讲解 1.C语言第一个代码:打印"This is the fi ...

  7. C语言编程规范 — 头文件、函数

    0 编码规范说明 0.1 前言 为了提高产品或项目代码质量,软件开发人员编写出简洁.可靠.可维护.可测试.高效.可移植的代码,树立良好的编程规范是非常有必要的,良好的编程规范能提高编程效率,规避很多编 ...

  8. 【读书笔记】-《华为-C语言编程规范》

    前言 作为程序开发者,避免不了阅读别人代码,那么就会涉及到到一门语言的编程规范.规范虽然不是语言本身的硬性要求,但是已经是每一个语言使用者约定俗成的一个规范.按照编程规范编写的代码,至少在代码阅读时, ...

  9. 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

最新文章

  1. 傅里叶变换的应用之调制解调初步、采样
  2. Android 实现歌曲播放时歌词同步显示
  3. jQuery获取Select选择的Text和 Value
  4. Linux并发与同步专题 (1)原子操作和内存屏障
  5. 用eclipse创建动态web项目手动生成web.xml方法
  6. 产品经理如何催项目进度?
  7. 让你的Mac读给你听,还能听写,用来练习英语口语!
  8. STM32-通用定时器-PWM输出
  9. mac搭建apace和php开发环境
  10. 产品经理是“通”才还是“专”才
  11. aria2c 官方手册中文翻译版
  12. 遥感原理与应用【Ⅱ】
  13. scrapy爬虫命令
  14. java跨站攻击_安全测试-跨站脚本攻击(xss)
  15. 变声算法实现(基频追踪+SOLA)
  16. Java程序员的重启人生-1.初到异世界
  17. datasources数据源自动配置
  18. java 迭代器的hasnext,在Python迭代器中具有hasNext?
  19. python,pip,xlrd 安装
  20. 如何快速爬取QQ音乐上的歌手曲目排名并做成Excel表格形式

热门文章

  1. 敏捷开发框架_力软敏捷开发框架,不需要程序员也能做的开发工具
  2. 本地提交到yarn_Flink on Yarn三部曲之三:提交Flink任务
  3. python组合数据类型实验_Python程序设计实验报告七:组合数据类型
  4. php区分全角半角字符,php如何判断是字符串全角还是半角
  5. ELK 源码详细安装步骤
  6. mvc html.dropdownlist,ASP.NET MVC4中使用Html.DropDownListFor的方法示例
  7. 玩转 SpringBoot 2 快速整合 Listener
  8. Maven私服(二) - Nexus的安装
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的会议室预约管理系统
  10. ubuntu apt-get update 失败解决