python编程规范系列--建议08~18
本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。
本章主要内容
建议8:利用assert语句来发现问题建议9:数据交换值时不推荐使用中间交换变量建议10:充分利用Lazy evaluation的特性建议11:理解枚举替代实现的缺陷建议12:不推荐使用type来进行类型检查建议13:尽量转换为浮点类型再做除法建议14:警惕eval()的安全漏洞建议15:使用enumerate()获取序列迭代的索引和值建议16:分清==与is的适用场景建议17:考虑兼容性,尽可能使用Unicod建议18:构建合理的包层次来管理module
建议8:利用assert语句来发现问题
建议9:数据交换值时不推荐使用中间交换变量
- >>> from timeit import Timer
- >>> Timer('temp=x;x=y;y=temp','x=2;y=3').timeit()
- 0.03472399711608887
- >>> Timer('x,y=y,x','x=2;y=3').timeit()
- 0.031581878662109375
建议10:充分利用Lazy evaluation的特性
建议11:理解枚举替代实现的缺陷
- >>> from collections import namedtuple
- >>> Seasons=namedtuple('Seasons','Spring Summer Autumn Winter')._make(xrange(4))
- >>> print Seasons
- Seasons(Spring=0, Summer=1, Autumn=2, Winter=3)
- >>> print Seasons.Autumn
- 2
- >>> Seasons._replace(Spring=2) # 不合理
- Seasons(Spring=2, Summer=1, Autumn=2, Winter=3)
- >>> Seasons.Summer+Seasons.Autumn == Seasons.Winter # 无意义
- True
- from flufl.enum import Enum
- class Seasons(Enum):
- Spring = "Spring"
- Summer = 2
- Autumn = 3
- Winter = 4
- Seasons = Enum('Seasons', 'Spring Summer Autumn Winter')
- print Seasons
- print Seasons.Summer.value
建议12:不推荐使用type来进行类型检查
建议13:尽量转换为浮点类型再做除法
- >>> i=1
- >>> while i!=1.5:
- ... i=i+0.1
- ... print i
建议14:警惕eval()的安全漏洞
- # -*-coding:UTF-8 -*-
- import sys
- from math import *
- def ExpCalcBot(string):
- try:
- print 'Your answer is', eval(string)
- except NameError:
- print "The expression you enter is not valid."
- while True:
- print 'Please enter a number or operation. Enter e to complete. '
- inputStr = raw_input()
- if inputStr == 'e':
- sys.exit()
- elif repr(inputStr) != ' ':
- ExpCalcBot(inputStr)
输入:__import__("os").system("dir") 显示当前目录下的所有文件.
建议15:使用enumerate()获取序列迭代的索引和值
- >>> person={'name': 'Josn', 'age': 19, 'hobby': 'football'}
- >>> for k,v in person.iteritems():
- ... print k, ":", v
建议16:分清==与is的适用场景
- >>> a="Hi"
- >>> b="Hi"
- >>> a is b
- True
- >>> a==b
- True
- >>> a1 ="I am using long string for testing" # 注意区分
- >>> b1 ="I am using long string for testing"
- >>> a1 is b1
- False
- >>> a1==b1
- True

建议17:考虑兼容性,尽可能使用Unicode


- import codecs
- content = open('manage.py', 'r').read()
- if content[:3] == codecs.BOM_UTF8:
- content = content[:3]
- print content.decode("utf-8")
- # coding=<encoding name> #方式一
- #!/usr/bin/env python
- # -*- coding:<encoding name> -*- #方式二
- #!/usr/bin/env python
- # vim:set fileencoding=<encoding name> #方式三
建议18:构建合理的包层次来管理module
使用包的好处:
python编程规范系列--建议08~18的更多相关文章
- python编程规范系列--建议01~07
本系列来自<编写高质量代码 改善python程序的91个建议>的读书笔记整理. 本书主要内容 1)容易被忽视的重要概念和常识,如代码的布局和编写函数的原则等: 2)编写py ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- Python编程规范(PEP8)
Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...
- Python学习手册之 Python 之禅、Python 编程规范和函数参数
在上一篇文章中,我们介绍了 Python 的正则表达式使用示例,现在我们介绍 Python 之禅. Python 编程规范和函数参数.查看上一篇文章请点击:https://www.cnblogs.co ...
- Python编程规范及性能优化(转载)
转载地址:http://codeweblog.com/python编程规范及性能优化/
- PEP8 Python编程规范
官方文档: https://www.python.org/dev/peps/pep-0008/ ---------------------------------------------------- ...
- Python 编程规范梳理
缘由 由于项目团队中新加入了几名攻城狮, 大家之前的背景各不相同,写出的代码也是“风格迥异”.正所谓:“无规则不成方圆”,因此需要对编程进行必要的规范. 整体的思路是:依照PEP8 Python 编码 ...
- Python 编程规范 —— TODO 注释(结合 PyCharm)
编程是代码和注释的统一: TODO 自然表示需要做而未做的一些待完成的事项,有助于事后的检索,以及对整体项目做进一步的修改迭代. # TODO(kl@gmail.com): Use a "* ...
- PEP 8 python编程规范
一 代码编排 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 类和to ...
随机推荐
- 设计模式--状态模式C++实现
1定义 当一个状态的内在状态改变时允许其行为改变,这个对象看起来像改变了其类 2类图 角色分析 State抽象状态角色,接口或者抽象类,负责状态定义,并且封装环境角色以实现状态切换 ConcreteS ...
- 51nod-1574-排列转换
1574 排列转换 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 现在有两个长度为n的排列p和s.要求通过交换 ...
- Java导出Excel(有数据库导出代码)
/** * 导出 * @param request * @param response * @throws Exception */ @SuppressWarnings("unchecked ...
- Highcharts 树状图(Treemap)
Highcharts 树状图(Treemap) 树状图 series 配置 设置 series 的 type 属性为 treemap ,series.type 描述了数据列类型.默认值为 " ...
- html中引入另一个html文件
https://segmentfault.com/q/1010000002954318
- C#连接Oracle数据库查询数据
C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...
- 转载:【Oracle 集群】RAC知识图文详细教程(三)--RAC工作原理和相关组件
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- Node.js 全栈开发(二)——ES 201x 新语法的使用之基础篇
在讲 ES 2015 新语法之前,先来说一下为什么叫 ES.JavaScript 是这门语言的名称,它有一个为它制定标准化的组织 European Computer Manufacturers Ass ...
- 前台cookie的操作
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- ide 下spingboot 实现热部署
需要从maven中下载devtools插件pom.xml:step1:修改pom.xml<dependencies><dependency><groupId>org ...