《改善Python程序的91个建议》读书笔记(部分)
2017-04-04 16:24
260 查看
前言
有幸拜读了《改善Python程序的91个建议》,学到很多python代码的小技巧。书写的很全,分的很细,很多知识如果想深入了解的,是仍然要通过其他渠道来学习的。电子版书籍下载:http://download.csdn.net/detail/u013128262/9631704
笔记
以下是从我的角度,记录下的部分笔记理解 Pythonic 概念
美胜丑,显胜隐,简胜杂,杂胜乱,平胜陡,疏胜密。找到简单问题的一个方法,最好是唯一的方法(正确的解决之道)。
难以解释的实现,源自不好的主意;如有非常棒的主意,它的实现肯定易于解释。
eval
警惕eval()的安全漏洞enumerate
# python 迭代中字典获取k,v的方法 for k,v in personinfo.iteritems(): print k,":",v
使用enumerate()获取序列迭代的索引和值
# 获取索引 li = ['1','2','3'] for i, e in enumerate(li): print i, e
is 与 ==
is 与 ==is 用来比较两个对象在内存中是否拥有同一块内存空间,并不适用于字段串的比较
x is y 只有x,y是同一个对象时才返回true
a == b 类似 a.__equal__(b)
'a' is 'a' print True
这个是因为python的string interning机制造成的,对于较小的字符串,系统只是保留其值的一个副本
i+=1 ++i
++i与–ii+=1 不等同于 ++i
with的妙用
对文件操作,操作完就应该立即关闭之。使用with自动关闭资源
无论程序以何种方式跳出with块,总能保证文件被正确关闭
with open('test.txt', 'w') as f: f.write('test')
深入理解None
深入理解None,正确判断对象是否为空python中的空对象
常量None
常量False
任何形式的0数值:0 、0L、0.0、0j
空的结构:[],{},”,()
join、+连接字符串
连接字符串优先 join,而不是+join效率高
join会计算总的内存空间,时间复杂度是n(n)
+的时间复杂度是n(n^2)
ConfigParser用法
解析配置文件# encoding: utf-8 import ConfigParser conf = ConfigParser.ConfigParser() conf.read('test.conf') print conf.sections() print conf.options('sec_a') # ['sec_a', 'sec_b'] 展示section下所有的option,可以理解为key print conf.items('sec_a') # [('a_key1', '20'), ('a_key2', '10')]将这个section下的值以kv形式展现 print conf.get('sec_a', 'a_key1') # 20 获取指定section,option下的值,类似于value,结果是string print conf.getint('sec_a', 'a_key1') # 20 结果是int型 conf.set('sec_a', 'c_key1', '100') print conf.options('sec_a') conf.write(open("test.conf", 'w')) # section 必须存在,如果option存在,则是修改value,否则就是新增一个option,最终只有conf.write后才算真正写入 conf.add_section('sec_c') conf.write(open("test.conf", 'w')) # 新增一个section
理解GIL
GIL被称为为全局解释器锁(Global Interpreter Lock),是Python虚拟机上用作互斥线程的一种机制,它的作用是保证任何情况下虚拟机中只会有一个线程被运行,而其他线程都处于等待GIL锁被释放的状态。对于有I/O操作的多线程。不管是在单核系统还是多核系统中,始终只有一个获得了GIL锁的线程在运行,每次遇到I/O操作便会进行GIL锁的释放。如果是纯计算的程序,没有I/O操作,解释器则会根据sys.setcheckinterval的设置来自动进行线程间的切换,默认情况下每隔100个时钟(注:这里的时钟指的是Python的内部时钟,对应于解释器执行的指令)就会释放GIL锁从而轮换到其他线程的执行
GIL的引入确实使得多线程不能在多核系统中发挥优势,但它也带来了一些好处:大大简化了Python线程中共享资源的管理,在单核CPU上,由于其本质是顺序执行的,一般情况下多线程能够获得较好的性能。此外,对于扩展的C程序的外部调用,即使其不是线程安全的,但由于GIL的存在,线程会阻塞直到外部调用函数返回,线程安全不再是一个问题。
其他人的笔记
他山之石可以攻玉,可以看看别人是怎么总结的。https://zhuanlan.zhihu.com/p/26155739
相关文章推荐
- 改善python程序的91个建议读书笔记1
- 改善python程序的91个建议读书笔记(4)
- 改善python程序的91个建议读书笔记(3)
- 改善python程序的91个建议读书笔记2
- 《改善Python程序的91个建议》阅读笔记
- 《编写高质量代码 改善Python程序的91个建议》读后程序学习小结
- 改善Python程序的91个建议
- 改善python程序的91个建议
- 改善Python程序的91个建议
- python中函数默认参数的陷阱(《改善python程序的91个建议》)
- 编写高质量代码 改善Python程序的91个建议
- 编写高质量代码--改善python程序的建议(四)上
- 编写高质量代码–改善python程序的建议(二)
- 编写高质量代码--改善python程序的建议(一)
- 编写高质量代码--改善python程序的建议(四)
- 编写高质量代码--改善python程序的建议(六)续
- 编写高质量代码--改善python程序的建议(八)
- 编写高质量代码--改善python程序的建议(七)
- 读书笔记--编写高质量代码 改善java程序的151个建议(六)枚举与注解
- 读《编写高质量代码改善python的91个建议》笔记 建议7: