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 ...
随机推荐
- 【Demo】jQuery 表格内容动态排序
实现功能: 通过点击表头某个字段,实现内容的升序或降序排序. 效果如下: 完整代码: <!DOCTYPE html> <html> <head> <meta ...
- 1-19-1 RHEL6启动原理和故障排除
大纲: 一.RHEL6系统启动原理 BIOS--->mbr--->bootloader--->内核--->init--->/etc/rc.d/rc.sysinit---& ...
- 十四 web爬虫讲解2—Scrapy框架爬虫—豆瓣登录与利用打码接口实现自动识别验证码
打码接口文件 # -*- coding: cp936 -*- import sys import os from ctypes import * # 下载接口放目录 http://www.yundam ...
- nyoj299——如何优雅的写矩阵快速幂
Matrix Power Series 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Given a n × n matrix A and a positive i ...
- compass框架的sprite雪碧图的用法简要
---恢复内容开始--- **简介** CSS SPRITE 即 CSS雪碧,即是将诸多图片合成一张图片,然后使用CSS 的background和background-position属性渲染. 这样 ...
- SpringInAction--自动化装配Bean(隐式装配)
关于Bean的介绍就具体不多介绍了,,, Spring在配置时候有三种方案可选 1.在xml中进行显示配置 2.在java中进行显示配置 3.隐式的Bean发现机制和自动装配 今天学习的就是自动化装配 ...
- 20165202 2017-2018-2 《Java程序设计》第9周学习总结
教材学习内容总结 Ch13 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序. 一个URL对象通常包含最基本的三 ...
- 为什么叫金拱门- golden arch
不要再纠结为什么叫这么难理解的名字了.因为从golden arch直译过来的撒.金色的拱门.就叫金拱门咯. 关于M的商标的历史来源如下: "McDonald's logo" red ...
- PostgreSQL 9.6 同步多副本、remote_apply记录
摘自:https://yq.aliyun.com/articles/61274 同步多副本配置方法 参数配置如下 synchronous_standby_names (string) 支持两种写法 n ...
- iOS开发之解决CocoaPods中“.h”头文件找不到的问题,简单粗暴的方法
如果是拖进工程中的framework或者第三方文件,如果找不到,删除了重新添加或者修改search path地址,如果不知道怎么修改,在工程文件夹中,找到对应的文件,然后将文件拖到修改文件地址的位置, ...