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 ...
随机推荐
- CodeForces 297C Splitting the Uniqueness (脑补构造题)
题意 Split a unique array into two almost unique arrays. unique arrays指数组各个数均不相同,almost unique arrays指 ...
- nodejs pm2配置使用
nodejs pm2配置使用教程参考链接:http://www.111cn.net/sys/linux/100927.htm 安装步骤: yum -y install npmnpm install - ...
- Linux 文件与目录管理,Linux系统用户组的管理
一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...
- NPOI:操作总结
1.套路 使用了NPOI一段时间,也慢慢了解了操作的流程,或者说套路: a.创建Workbook: HSSFWorkbook Workbook = new HSSFWorkbook(); b.在Wor ...
- http请求的GET和POST请求:查询和新增(server.php)
<?php //设置页面内容是html编码格式是utf-8 header("Content-Type: text/plain;charset=utf-8"); //heade ...
- 【CodeForces - 870C】
题意: 计算一个整数最多可以拆分为多少个合数(要求拆分的全是合数).例如:12的拆分法案是12=4+4+4. 合数是指除了1之外的非素数(正整数). 思路: 偶数的话用4.6就可以满足,奇数的话减去一 ...
- 火影忍者之~鸣人 (字符串处理,strcmp)
火影忍者的男主角漩涡鸣人,因为身上封印着邪恶的九尾妖狐,无父无母的他受尽了村人的冷眼与歧视,他下定决心要成为第六代火影,让所有人都认同他的存在,火影是动漫火影忍者中主人公鸣人所在的国家的最强忍者的头衔 ...
- MATLAB基础知识tips
网络论坛资源: MATLAB中文论坛https://i.cnblogs.com/EditPosts.aspx?opt=1 circshift 移位函数,circshift(A,SHIFTSIZE).S ...
- Spring报错: org.springframework.beans.factory.support.BeanDefinitionValidationException: Couldn't find an init method named 'init' on bean with name 'car'(待解答)
在Spring工程里,有一个Car类的bean,Main.java主程序,MyBeanPostProcessor.java是Bean后置处理器. 文件目录结构如下: Car.java package ...
- Linux系统下超级用户密码的修改
1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x (具体编辑内容为下图:删除倒数第三行 ...