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 ...
随机推荐
- Kotlin------函数和代码注释
定义函数 Kotlin定义一个函数的风格大致如下 访问控制符 fun 方法名(参数,参数,参数) : 返回值类型{ ... ... } 访问控制符:与Java有点差异,Kotlin的访问范围从大到小分 ...
- Nginx安装和使用
Nginx简介 nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后 ...
- LeetCode 275. H-Index II
275. H-Index II Add to List Description Submission Solutions Total Accepted: 42241 Total Submissions ...
- OpenCL将数组从内存copy到显存
本来想对上一篇博客做优化,优化效果不明显.但知识点还是要记一下. 初衷是想把上一篇博客中定义域的计算搬到CPU来计算,因为定义域的计算对于每一个kernel都是一样的,所以直接读取应该是可以进一步减小 ...
- Java Web中Kaptcha实现验证码
首先进行导入相应的jar包: 1.如果是maven项目,在你的pom文件中进行添加如下代码,将自动下载jar包到你的工程中: <dependency> <gro ...
- ElasticSearch6.0 索引模板
我们在做es搜索的场合,每次创建索引的时候,都需要为每个索引设置mapping的字段映射,现在我们可以为通用的索引创建一个模板 每次创建索引时候,如果匹配到相应的模板 索引的mapping会被自动设置 ...
- 移动设备web开发插件iScroll的使用详解
地址:http://blog.nnnv.cn/index.php/archives/65
- Linux:vim环境设置
vim环境设置 vim的环境设置在/etc/vimrc的这个文件中,不过不建议直接修改该配置文件.但是可以修改~/.vimrc文件,默认是不存在的,要手动创建并写入设置值. set hlsearch ...
- Python自定义大小截屏
蝈蝈这两天正忙着收拾家当去公司报道,结果做PHP的发小蛐蛐找到了他,说是想要一个可以截图工具. 大致需要做出这样的效果. 虽然已经很久不写Python代码了,但是没办法,盛情难却啊,只好硬着头皮上了. ...
- Amazon面试题
亚马逊面试题: 如下所示的Map中,0代表海水,1代表岛屿,其中每一个岛屿与其八领域的区间的小岛能相连组成岛屿群.写代码,统计Map中岛屿个数. /* Q1. Map [ 0 0 0 0 0 0 0 ...