Python规范:代码规范要注意
主要有以下两种代码规范
- 《8 号 Python 增强规范》(Python Enhacement Proposal #8),以下简称 PEP8;
- 《Google Python 风格规范》(Google Python Style Guide),以下简称 Google Style,这是源自 Google 内部的风格规范。公开发布的社区版本,是为了让 Google 旗下所有 Python 开源项目的编程风格统一。(http://google.github.io/styleguide/pyguide.html)
- Google Python Style Guide 要更严格些。
统一的编程规范为什么重要?
开发效率,关乎三类对象,也就是阅读者、编程者和机器。他们的优先级是阅读者的体验 >> 编程者的体验 >> 机器的体验。
阅读者的体验 >> 编程者的体验
不少的编程规范,本来就是为了优化读者体验而存在的。举个例子,对于命名原则,我想很多人应该都有所理解,PEP8 第 38 条规定命名必须有意义,不能是无意义的单字母。如:
错误示例
if (a <= 0):
return
elif (a > b):
return
else:
b -= a # 正确示例
if (transfer_amount <= 0):
raise Exception('...')
elif (transfer_amount > balance):
raise Exception('...')
else:
balance -= transfer_amount
再举一个例子,Google Style 2.2 条规定,Python 代码中的 import 对象,只能是 package 或者 module。
#错误示例
from mypkg import Obj
from mypkg import my_func my_func([1, 2, 3]) # 正确示例
import numpy as np
import mypkg np.array([6, 7, 8])
编程者的体验 >> 机器的体验
#错误示例
result = [(x, y) for x in range(10) for y in range(5) if x * y > 10]
# 正确示例
result = []
for x in range(10):
for y in range(5):
if x * y > 10:
result.append((x, y))
机器的体验也很重要
一些危险的编程风格,不仅会影响程序正确性,也容易成为代码效率的瓶颈。比如, is 和 ==的使用区别。is是比较对象的内存地址。因此在比较整数的地址时要注意。
#################实验证明,下面代码只在终端中执行Python命令行时才有效,而在执行脚本时整型的数据都会分配同一个空间
#错误示例
x = 27
y = 27
print(x is y) #True x = 721
y = 721
print(x is y) #False
#以上的代码的改成==,确保是对比对象的值。
#正确示例
x = 27
y = 27
print(x == y) x = 721
y = 721
print(x == y)
再看 == ,当比较的是对象或者None时,有可能就会出乎意料,因为==的结果,取决于__eq__() 方法的具体实现
#错误示例
class MyObject(object):
def __eq__(self, other):
if other:
return self.field == other.field
return True x = MyObject()
print(x == None)
如果要与None比较时,永远要使用is和is not
# 正确示例
x = MyObject()
print(x is None)
正确示例
def pay(name, salary=None):
if salary is not None:
salary = 11
print(name, "is compensated", salary, "dollars")
再提一个错误示范
#错误示例
adict = {i: i * 2 for i in xrange(10000000)} for key in adict.keys():
print("{0} = {1}".format(key, adict[key]))
keys() 方法会在遍历前生成一个临时的列表,导致上面的代码消耗大量内存并且运行缓慢。正确的方式,是使用默认的 iterator。默认的 iterator 不会分配新内存,也就不会造成上面的性能问题:
# 正确示例
for key in adict:
参考
摘自 《Python核心技术与实战》专栏
Python规范:代码规范要注意的更多相关文章
- Python pep8代码规范
title: Python pep8代码规范 tags: Python --- 介绍(Introduction) 官方文档:PEP 8 -- Style Guide for Python Code 很 ...
- python PEP8代码规范及问题
最近刚刚接触Python,为了养成好习惯,尽量保证自己写的代码符合PEP8代码规范,下面是过程中报出的警告及解决方法,英文有些翻译不太准确见谅,会不断更新: PEP 8: module level i ...
- python之代码规范
第一章 为什么要有规范化目录 真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码 软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发. 1.代码 ...
- python初学者-代码规范
一.编程规范 1.缩进(代码块) 类定义.函数定义.选择结构.循环结构.with块.行尾的冒号表示缩进的开始. python程序是依靠代码块的缩进来体现代码之间的逻辑关系,缩进结束就表示一个代码块结束 ...
- 代码规范、代码复审、PSP
作业三: 代码规范.代码复审.PSP 代码规范 代码规范的重要性 一.规范的代码可以促进团队合作 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码必定会风格迥异.且不说会存 ...
- JavaScript 代码规范
所有的 JavaScript 项目适用同一种规范. JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则. 其他常用规范-- 规范的代码可以 ...
- alpha冲刺——代码规范、冲刺任务与计划(追光的人)
代码规范 代码规范整合了自身项目实践还有诸多好的大公司的代码规范.如阿里巴巴开发手册.华为Java规范.W3C前端规范等. 由于内容过于详细和细致,为了方便查看,将其放置在了showDoc网站上(同时 ...
- JAVA代码规范 标签: java文档工作 2016-06-12 21:50 277人阅读 评论(5) 收藏
开始做java的ITOO了,近期的工作内容就是按照代码规范来改自己负责的代码,之前做机房收费系统的时候,也是经常验收的,甚至于我们上次验收的时候,老师也去了.对于我们的代码规范,老师其实是很重视的,他 ...
- Alpha冲刺——代码规范与计划
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...
随机推荐
- python接口自动化—封装获取常量的类
背景: 一.执行case的过程: 首先需要,我们能够通过excel获取单元格的内容.获取内容时,首先需要知道获取的数据是哪一行的,这行数据中需要拿那些参数,比如case 名称.请求url.请求方式.h ...
- Android学习小结
自从学习Android以来已经经过三个月了,如今市场对于Android工程师的需求接近饱和,所以学习Android的人也少了很多,很多的培训机构也逐渐将Android课程淘汰,导致学习Android的 ...
- docker 下载安装镜像
docker安装成功后. 1.搜索镜像 # docker search java 可使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放所有docker ...
- 抓取Dump文件的方法和工具介绍
一.Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件 ...
- jaeger使用yugabyte作为后端存储的尝试以及几个问题
前边写过使用scylladb 做为jaeger 的后端存储,还是一个不错选择的包括性能以及 兼容性,对于 yugabyte 当前存在兼容性的问题,需要版本的支持,或者尝试进行一些变动 create 语 ...
- git sh.exe 乱码
其实很简单,只需要在 git 安装目录中的 etc 目录下修改 bash.bashrc 文件. 在该文件头部加入: export LANG=zh_CN.utf-8alias ls='ls --show ...
- vue on-change 如果有循环的timer 则无限自动执行
<div class="contract-class"> <Checkbox v-model="smallChecked" :on-chang ...
- Linux系统学习(二)一Linux基本操作
一.Linux的目录结构 1.1 Linux的目录结构图 1.2 目录内容 /:这就是根目录.对你的电脑来说,有且只有一个根目录.所有的东西,我是说所有的东西都是从这里开始.举个例子:当你在终端里输入 ...
- 第06组 Beta冲刺(3/5)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 继续维护后端代码 学习深入python 研究匿名拨打电话问题.套牌多结果处理问题 Git ...
- Jmeter多业务混合场景如何设置各业务所占并发比例
在进行多业务混合场景测试中,需要分配每个场景占比. 具体有两种方式: 1.多线程组方式: 2.逻辑控制器控制: 第一种: jmeter一个测试计划可以添加多个线程组,我们把不同的业务放在不同的线程组中 ...