《Effective Python 编写高质量Python代码的59个有效方法》读书笔记

《Effective Python 编写高质量Python代码的59个有效方法》这本书是python进阶阶段可以阅读的书,不适合初学者,及时是进阶阶段,也建议放到中期来读,即不适合作为python进阶的第一本书,之前介绍的《流畅的python》比较适合进阶第一书阅读。
另外,这本书没有多少原理性说明,更多的是技巧或者编程习惯方面的建议。不要期望多高。

第1条:确认自己所用的python版本
import sys
print(sys.version_info)
print(sys.version)
python2到python3的自动化迁移工具有:2to3, six等

第2条:遵循PEP8风格指南
PEP 8应该读一遍,并遵守:https://www.python.org/dev/peps/pep-0008/
空白:
每行字符数不应该超过79个
函数与类之间的间隔应该有2个空行隔开
在同一个类中的方法之间应该有1个空行隔开
变量赋值的=号左右需要空一格
[]取值里面不要有空格
命名:
函数、变量、属性应该是小写字母,单词之间有下划线
受保护的实例属性应该以单_开头
私有属性以两个__开头
类与异常,应该以每个单词大写,且没有_组成
模块级别的常量,应该以全大写字母且有_相连
类方法的第一个参数应该是cls,实例方法第一个参数是self
表达式和语句:
采用内联形式的否定词,而不要放到整个表达式前面,如if a is not b,不是if not a is b
不用用长度检测,如if len(somelist) == 0来判断[]或’'为空,应直接采用if not somelist。空值会自动认为是False
不要单行的if/for/while/except语句
引入魔抗应该使用绝对名称,from package import module
import应该分为3部分:标准库、第三方库、自己的模块,各import可以按字母顺序排序

第3条:了解bytes、str、unicode区别
python的str就是unicode,简称码位,程序体中应该以unicode为主,在入口和出口处做编解码处理
python3打开文件默认是utf-8编码格式

第4条:用辅助函数来取代复杂的表达式
当一个表达式很长很复杂时,把它拆成函数实现

第5条:了解切割序列的方法
[]中的开头和结尾如非必要空着,[]内最好只有一个元素

第6条:在单次切片操作内,不要同时指定start、end和stride
str[::-1]可以获取字符串的倒序

第7条:用列表推导来取代map和filter

第8条:不要使用含有两个以上的表达式的列表推导

第9条:用生成器表达式来改写数据量较大的列表推导

第10条:尽量用enumarate取代range

第11条:用zip函数同时遍历2个迭代器

第12条:不要在for和while循环后面写else块
else其实是没有错误时执行

第13条:合理利用try/except/else/finally结构中的每一个代码块

第14条:尽量用异常来表示特殊情况,而不要返回None
避免返回None的2种办法:
1、把返回值拆成2个组成的元祖,第一个表示操作是否成功True或False,第二个表示真实结果
2、抛出异常给上一级,raise ValueError(“Invalid inputs”) from e

第15条:了解如何在闭包里使用外围作用域种的变量
nonlocal只能作用在当前和上一层的函数体中

第16条:考虑用生成器来改写直接返回列表的函数
将迭代器用list()可以返回所有值

第17条:在参数上面迭代时,要多加小心
在已经用完的迭代上面继续使用不会报错

第18条:用数量可变的位置参数减少视觉杂讯

第19条:用关键字参数来表达可选的行为
位置参数必须出现在关键字参数前面
优点:
提高可读性
提供默认值
提高可扩展性

第20条:用None和文档字符串来描述具有动态默认值的参数
参数的默认值只会在模块加载时被执行一次,后面不会再执行
参数的默认值如果用可修改值,会引入所有引用该函数的地方都使用同一个值,比如[]{}

第21条:用只能以关键字形式指定的参数来确保代码清晰
python3中定义一种只能以关键字形式来指定的参数,从而确保调用该函数的代码读起来会比较明确。
这些参数必须以关键字的形式提供,而不能按位置提供。
在参数列表中用*完成位置参数和关键字参数的分隔

第22条:尽量用辅助类来维护程序的状态,而不要用字典和元祖
用来保存程序状态的数据结构一旦变得过于复杂,就应该将其拆解为类,以便提供更为明确的接口,并更好的封装数据。
这样做也能在接口和具体实现之间创建抽象层。
namedtuple的局限:无法指定默认值。能用类尽量用类。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值