《改善python程序的91个建议》阅读笔记

这本书 从基本原则、惯用法、语法、库、设计模式、内部机制、开发工具和性能优化8方面深入探讨编写高质量Python代码的技巧、禁忌和最佳实践。

本书全名为:《编写高质量代码改善 Python 程序的 91 个建议》 ,电子版已经有人整理到 gitbook:https://l1nwatch.gitbooks.io/writing_solid_python_code_gitbook/content/

主要建议记录:

1.类型检查,不要用type(),尽量使用isinstance(xx,int)

2.对list做遍历,建议使用enumerate,字典不适用,因为会对字典做序列处理,建议使用

for k,v in personinfo.iteritems():
    print k,":",v

 3.except中的finally中的坑

一.临时保存的异常将会再次被抛出,但如果finally语句中产生了新的异常或者执行了return或者break语句,那么临时保存的异常将会被丢失,从而导致异常屏蔽。
二.在实际应用程序开发过程中,并不推荐在finally中使用return语句进行返回,这种处理方式不仅会带来误解而且可能会引起非常严重的

4.字符串的拼接优先使用 join而不是直接➕,量大的时候效率会相差很多

5.占位符优先使用format而不是%

6.深拷贝浅拷贝

     因此,对于Python函数参数是传值还是传引用这个问题的答案是:都不是。正确的叫法应该是传对象(call by object)或者说传对象的引用(call-by-object-reference)。
     函数参数在传递的过程中将整个,对象传入,对可变对象的修改在函数外部以及内部都可见,调用者和被调用者之间共享这个对象,而对于不可变对象,由于并不能真正被修改,因此,修改往往是通过生成一个新对象然后赋值来实现的。

7.Tuple替代list(当定义的是常量集,并且唯一要用它做的是不断地遍历它)

8.while替代if else(某些情况)

9.dic遍历,key 不存在的错误,用get (“key ”,“error ”),用get 替代直接索引

10.set 和dict 类似,但只存储key ,而且不重复,所以可以list (set (list )),来做去重

11.用map 改造所有的list 遍历再做方法调用的情况。大小写转换也可以。

12.filter 函数,例如筛选所有的奇数,用法和map一致。

13.Python 中闭包,装饰器,yeild,协程

14.深拷贝浅拷贝:def 方法,设置默认参数时,尽量不要使用可变对象,如def change(id,alist=[]),因为一旦调用两次,默认参数的list会使用上一次的list内容做传递。造成错误。

15.repr()和str()区别:

1)两者之间的目标不同:str()主要面向用户,其目的是可读性,返回形式为用户友好性和可读性都较强的字符串类型;而repr()面向的是Python解释器,或者说开发人员,其目的是准确性,其返回值表示Python解释器内部的含义,常作为编程人员debug用途。
2)在解释器中直接输入a时默认调用repr()函数,而print a则调用str()函数。
3)repr()的返回值一般可以用eval()函数来还原对象,通常来说有如下等式。obj == eval(repr(obj))
16.判断一个变量s是不是字符串:python中的字符串其实有str和unicode两种,所以,判断一个变量s是不是字符串应使用isinstance(s,basestring),注意这里的参数是basestring而不是str
17.titile()的功能是将每一个单词的首字母大写,并将单词中的非首字母转换为小写(英文文章的标题通常是这种格式)。
18.python多线程问题,一直容易造成坑,可以用自带的queue来缓解。
19.内置logging记录日志,其他开源有些基于此基础
20………..

Written by

说点什么

欢迎讨论

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒