Effective Python
天地一扁舟
这个作者很懒,什么都没留下…
展开
-
Effective Python 读书笔记: 第44条: 用copyreg实现可靠的pickle操作
# -*- encoding: utf-8 -*-import copy_regimport pickle'''第44条: 用copyreg实现可靠的pickle操作关键:1 pickle模块作用: 能够将Python对象序列转化为字节流,并反序列化为Python对象 开发者可以在自己控制的各个程序之间传递python对象定义:pickle.dump(obj, f...原创 2019-04-09 08:16:15 · 250 阅读 · 0 评论 -
Effective Python 读书笔记: 第38条: 在线程中使用Lock来防止数据竞争
# -*- encoding: utf-8 -*-from threading import Lockfrom threading import Thread'''第38条: 在线程中使用Lock来防止数据竞争关键:1 关于线程安全问题python解释器在执行两个连续的字节码指令时,其他线程可能会插入进来。本质: 非原子操作会被打断可能带来脏数据,导致线程不安全2 解...原创 2019-04-01 21:58:50 · 116 阅读 · 0 评论 -
Effective Python 读书笔记: 第37条: 可以用线程来执行阻塞式I/O,但不要用它做平行计算
# -*- encoding: utf-8 -*-import selectfrom threading import Threadfrom time import time'''第37条: 可以用线程来执行阻塞式I/O,但不要用它做平行计算关键:1 python实现CPython运行python过程:1) 源码->字节码2)解释器运行字节码为了保证一致行,采用...原创 2019-04-01 21:38:20 · 123 阅读 · 0 评论 -
Effective Python 读书笔记: 第21条: 用只能以关键字形式指定的参数来确保代码明晰
# -*- encoding: utf-8 -*-from datetime import datetimeimport os'''第21条: 用只能以关键字形式指定的参数来确保代码明晰关键:1 关于位置参数参数列表中的*号,表示位置参数结束了,之后参数都值能以关键字形式指定2 *参数含义: 接收数量可变的位置参数3 **参数含义: 接收任意数量的关键字参数参考:...原创 2019-03-27 22:33:09 · 155 阅读 · 0 评论 -
Effective Python 读书笔记: 第20条: 用None和文档字符串来描述具有动态默认值的参数
# -*- encoding: utf-8 -*-from datetime import datetimeimport os'''第20条: 用None和文档字符串来描述具有动态默认值的参数关键:1 参数的默认值特点: 包含代码的模块一旦加载进来,参数的默认值就不变了2 动态设置默认值把默认值设置为None,如果发现参数的值为None,就设置为默认值参考:Eff...原创 2019-03-27 22:22:41 · 165 阅读 · 0 评论 -
Effective Python 读书笔记: 第19条: 用关键字参数来表达可选的行为
# -*- encoding: utf-8 -*-import os'''第19条: 用关键字参数来表达可选的行为关键:1 关键字参数含义: 指func(a=1, b=2)中的类似a=1的这种关键字参数a优点: 1)明白参数的含义,2)可在函数中使用默认值,3) 扩充函数参数的代码与原来代码兼容参考:Effectiv Python 编写高质量Python代码的5...原创 2019-03-27 22:11:32 · 136 阅读 · 0 评论 -
Effective Python 读书笔记: 第23条: 简单的接口应该接受函数,而不是类的实例
# -*- encoding: utf-8 -*-import os'''第23条: 简单的接口应该接受函数,而不是类的实例关键:1 挂钩函数方法可以接受函数,可以通过该函数执行具体的行为应用场景: sort方法可以接受key参数,指定每个索引位置如何排序2 __call__方法类中可以定义__call__方法,此时类的对象变成可调用对象。作用: 允许一个类的实例像函...原创 2019-03-28 08:59:05 · 209 阅读 · 0 评论 -
Effective Python 读书笔记: 第22条: 尽量用辅助类来维护程序的状态,而不要用字典
# -*- encoding: utf-8 -*-import collections'''第22条: 尽量用辅助类来维护程序的状态,而不要用字典关键:1 动态含义:指这些保存的信息建议:用来保存程序状态的数据结构如果复杂,应该拆分为类2 把嵌套结构重构为类collections模块的namedtuple(具名元组)可以定义出不可变的数据类定义: collectio...原创 2019-03-28 08:39:03 · 161 阅读 · 0 评论 -
Effective Python 读书笔记: 第36条: 用subprocess模块来管理子进程
# -*- encoding: utf-8 -*-import osimport subprocessfrom time import time'''第36条: 用subprocess模块来管理子进程关键:1 并发含义: 轮流执行程序的方式2 并行含义: 同一时间执行多个程序3 并发与并行的区别并发速度要比并行要慢4 运行子进程的方式subprocess模...原创 2019-04-01 09:11:25 · 239 阅读 · 0 评论 -
Effective Python 读书笔记: 第35条: 用元类来注解类的属性
# -*- encoding: utf-8 -*-import os'''第35条: 用元类来注解类的属性关键:1 元类作用:在类定义好但是还没有使用的时候,提前修改或注解类的属性, 该写法通常会与描述符搭配起来,使这些属性可以了解自己在外围类的使用方式应用场景:定义某个类,表示客户数据库中的某一行。还希望该类的相关属性与数据库表的没一列之间,建立对应关系2 ...原创 2019-04-01 08:47:58 · 173 阅读 · 0 评论 -
Effective Python 读书笔记: 第34条: 用元类来注册子类
# -*- encoding: utf-8 -*-import json'''第34条: 用元类来注册子类关键:1 元类作用: 在程序中自动注册类型,对于需要反向查询的场合有用。 可以在简单的标示符与对应的类之间建立映射关系。应用场景:1) 将python对象表示为JSON格式的序列化数据,即将指定对象转换成JSON字符串。2) 开发者继承某个类的时候,程序自动...原创 2019-03-31 22:12:43 · 187 阅读 · 0 评论 -
Effective Python 读书笔记: 第33条: 用元类来验证子类
# -*- encoding: utf-8 -*-import os'''第33条: 用元类来验证子类关键:1 元类作用: 验证某个类定义是否正确原理: 定义新的类时,它会运行验证代码,确保新类符合规范定义元类: 定义元类,需要从type中继承对于使用该元类的其他类来说,会把这些类的class语句提中的内容发送给元类的__new__方法。2 元类的特点与引用场景特...原创 2019-03-31 19:30:31 · 121 阅读 · 0 评论 -
Effective Python 读书笔记: 第32条: 用__getattr__、__getattribute__和__setattr__实现按需生成的属性
# -*- encoding: utf-8 -*-import os'''第32条: 用__getattr__、__getattribute__和__setattr__实现按需生成的属性关键:1 __getattr__应用场景: 把数据库的行表示为Python对象,操作与行对应的对象时,需要直到这个数据库的结构作用: 若某个类定义了__getattr__, 且无法在该类对象...原创 2019-03-31 19:09:04 · 138 阅读 · 0 评论 -
Effective Python 读书笔记: 第39条: 用Queue来协调各线程之间的工作
# -*- encoding: utf-8 -*-from collections import dequefrom queue import Queuefrom threading import Lockfrom threading import Threadfrom time import sleep'''第39条: 用Queue来协调各线程之间的工作关键:1 管线将...原创 2019-04-01 22:26:55 · 227 阅读 · 0 评论 -
Effective Python 读书笔记: 第51条: 为自编的模块定义根异常,以便将调用者与API相隔离
# -*- encoding: utf-8 -*-import os'''第51条: 为自编的模块定义根异常,以便将调用者与API相隔离1 根异常应用:可以在模块中提供一种根异常后,然后令该该模块所抛出的其他异常,都继承自这个根异常。作用:1) 捕获根异常,直到别人调用代码是否正确2) 帮助开发者寻找API中的bug3) 便于API的后续演化,提供更为具体的异常关键...原创 2019-04-07 16:36:45 · 154 阅读 · 0 评论 -
Effective Python 读书笔记: 第52条: 用适当的方式打破循环依赖关系
# -*- encoding: utf-8 -*-import os'''第52条: 用适当的方式打破循环依赖关系关键:1 相互依赖解释:A文件引用B文件中的内容,B文件又引用了A文件中的内容后果: 循环依赖会抛出异常那个问题原因:python的import有详细机制。引入模块时会按照深度优先顺序执行下列操作:1) 从sys.path指定路径中查找待引入的模块2) ...原创 2019-04-07 16:57:19 · 225 阅读 · 0 评论 -
Effective Python 读书笔记: 第43条: 考虑以contextlib和with语句来改写可复用的try/finally代码
# -*- encoding: utf-8 -*-from contextlib import contextmanagerimport logging'''第43条: 考虑以contextlib和with语句来改写可复用的try/finally代码关键:1 with语句作用: 进行文件关闭,资源清理,锁的获取与释放等支持with: 方式1:用contextlib模块处理...原创 2019-04-03 08:32:06 · 146 阅读 · 0 评论 -
Effective Python 读书笔记: 第42条: 用functools.wraps定义函数修饰器
# -*- encoding: utf-8 -*-import functools'''第42条: 用functools.wraps定义函数修饰器关键:1 装饰其作用: 装饰函数,能在原始函数执行前后添加另外地代码问题: 打印被装饰器修饰的函数,返回的是内部的wrapper函数解决方法: 用functools.wraps装饰器来装饰wrapper函数2 装饰器样例de...原创 2019-04-02 22:46:10 · 142 阅读 · 0 评论 -
Effective Python 读书笔记: 第25条: 用super初始化父类
# -*- encoding: utf-8 -*-from pprint import pprint'''第25条: 用super初始化父类关键:1 初始化父类的方式方式1: 在子类中调用父类的__init__方法,样例:ParentClass.__init__(self, value)问题: 1) 多重继承会调用超类的__init__2) 调用顺序不固定: 继承超...原创 2019-03-28 21:53:16 · 140 阅读 · 0 评论 -
Effective Python 读书笔记: 第59条: 用tracemalloc来掌握内存的使用及泄露情况
# -*- encoding: utf-8 -*-import gc'''第59条: 用tracemalloc来掌握内存的使用及泄露情况关键:1 python内存管理本质: 通过引用计数来 + 循环检测器作用: 1)当某个对象全部引用过期的时候,被引用对象可以得到清理2) 来即回收机制能把自我引用对象清除2 调试内存使用状况方法1: 使用gc模块进行查询,列出来即收...原创 2019-04-08 09:48:55 · 2961 阅读 · 0 评论 -
Effective Python 读书笔记: 第58条: 先分析性能,然后再优化
# -*- encoding: utf-8 -*-from bisect import bisect_leftfrom cProfile import Profilefrom pstats import Statsfrom random import randint'''第58条: 先分析性能,然后再优化关键:1 性能问题建议: 优化程序之前先分析性能性能分析工具: p...原创 2019-04-08 09:34:30 · 181 阅读 · 0 评论 -
Effective Python 读书笔记: 第57条: 考虑用pdb实现交互调试
# -*- encoding: utf-8 -*-import os'''第57条: 考虑用pdb实现交互调试关键:1 pdb含义: python交互调试器调试方法: 修改程序,在需要调试的代码前一行加上如下内容import pdb;pdb.set_trace()调试命令:1) bt: 打印当前执行点的调用栈信息,查看程序是如何从开始到达当前pdb处的示例输出:.&...原创 2019-04-08 08:44:58 · 124 阅读 · 0 评论 -
Effective Python 读书笔记: 第56条: 用unittest来测试全部代码
新建一个文件叫做utils.py,内容如下:# -*- encoding: utf-8 -*-import os'''第56条: 用unittest来测试全部代码关键:1 python是动态语言特点:1) 阻碍静态类型检查2) 容易为代码编写unittest3) 用动态特性覆写相关行为2 unittest模块测试编写可以使用unittest模块特点:1) 测...原创 2019-04-08 08:29:32 · 164 阅读 · 0 评论 -
Effective Python 读书笔记: 第55条: 通过repr字符串来输出调试信息
# -*- encoding: utf-8 -*-import os'''第55条: 通过repr字符串来输出调试信息关键:1 repr作用: 根据某个对象,返回可打印的字符串repr(mystr) 等同于 print "%r" % (mystr)2 eval作用: 将字符串转换为表达式进行计算3 类的__repr__方法作用:返回一个包含python表达式的字符...原创 2019-04-07 22:41:33 · 182 阅读 · 0 评论 -
Effective Python 读书笔记: 第54条: 考虑用模块级别的代码来配置不同的部署环境
# -*- encoding: utf-8 -*-import os'''第54条: 考虑用模块级别的代码来配置不同的部署环境关键:1 部署环境含义: 程序在运行的时候所用的一套配置生产环境: 产品环境关于配置:可以通过configparser或者oslo_config等模块将配置与代码分离2 总结可以在模块范围内,编写普通python语句来部署不同环境可以根据外部...原创 2019-04-07 22:27:11 · 201 阅读 · 0 评论 -
Effective Python 读书笔记: 第53条: 用虚拟环境隔离项目,并重建其依赖关系
# -*- encoding: utf-8 -*-import os'''第53条: 用虚拟环境隔离项目,并重建其依赖关系关键:1 依赖性的传递查看python包依赖于的其他包: 执行命令:pip show pecan输出结果:Name: pecanVersion: 1.3.2Summary: A WSGI object-dispatching web framewo...原创 2019-04-07 22:19:03 · 152 阅读 · 0 评论 -
Effective Python 读书笔记: 第41条: 考虑用concurrent.futures来实现真正的平行计算
# -*- encoding: utf-8 -*-from concurrent.futures import ThreadPoolExecutorfrom concurrent.futures import ProcessPoolExecutorfrom time import time'''第41条: 考虑用concurrent.futures来实现真正的平行计算关键:1...原创 2019-04-02 09:22:26 · 189 阅读 · 0 评论 -
Effective Python 读书笔记: 第40条: 考虑用协程来并发地运行多个函数
# -*- encoding: utf-8 -*-from collections import namedtuple'''第40条: 考虑用协程来并发地运行多个函数关键:1 线程缺点:1)多线程代码难懂2)线程需要占用大量内存,每个线程大约8MB3)线程启动开销较大2 协程作用: 使python程序看上去同时运行多个函数实现方式: 对生成器地扩展优点: 占据地...原创 2019-04-02 08:59:52 · 160 阅读 · 0 评论 -
Effective Python 读书笔记: 第31条: 用描述符来该写需要复用的@property方法
# -*- encoding: utf-8 -*-import weakref'''第31条: 用描述符来该写需要复用的@property方法关键:1 @property缺点: 不便于复用,受它修饰的方法无法被同一个类中其他属性复用,与之无关的类也无法复用这些方法2 描述符描述符类: 可以提供__get__和__set__方法原理: exam.writingGrad...原创 2019-03-31 18:39:02 · 131 阅读 · 0 评论 -
Effective Python 读书笔记: 第30条: 考虑用@property来代替属性重构
# -*- encoding: utf-8 -*-import os'''第30条: 考虑用@property来代替属性重构关键:1 @property修饰器作用: 访问类的成员变量,并可以向其中添加复杂的逻辑2 总结@property可以为类的成员变量添加新功能可以用@property完善数据模型参考:Effectiv Python 编写高质量Python代码的...原创 2019-03-31 18:17:13 · 146 阅读 · 0 评论 -
Effective Python 读书笔记: 第45条: 应该用datetime模块处理本地时间,而不是用time模块
# -*- encoding: utf-8 -*-from datetime import datetimeimport pytzfrom time import localtime, strftime'''第45条: 应该用datetime模块处理本地时间,而不是用time模块关键:1 UTC含义:协调世界时间,是标准时间表示方式,与时区无关时区转换: 用datetim...原创 2019-04-03 22:16:59 · 138 阅读 · 0 评论 -
Effective Python 读书笔记: 第15条: 了解如何在闭包里使用外围作用域中的变量
# -*- encoding: utf-8 -*-import copy'''第15条: 了解如何在闭包里使用外围作用域中的变量关键:1 闭包含义:定义在某个作用域中的函数,这种函数引用了该作用域的变量。特点: 函数是可以作为参数传递给其他函数元组比较规则: 先比较元组中下标为0的元素,然后比较下标为1的元素2 解析引用的顺序1) 当前函数的作用域2) 任何外围作用...原创 2019-03-29 18:29:03 · 162 阅读 · 0 评论 -
Effective Python 读书笔记: 第11条: 用zip函数同时遍历两个迭代器
# -*- encoding: utf-8 -*-import os'''第11条: 用zip函数同时遍历两个迭代器关键:1 zip方法作用: 把两个或两个以上的迭代器封装为生成器,可以稍后求值zip生成器会从每个迭代器中获取当前迭代器的下一个值,然后把值汇聚成元组2 注意点python 2中的zip会把迭代器产生的值汇聚成元组,并把元组组成的列表返回。所以不是zip迭...原创 2019-03-26 09:01:58 · 163 阅读 · 0 评论 -
Effective Python 读书笔记: 第10条: 尽量用enumerate取代range
# -*- encoding: utf-8 -*-import os'''第10条: 尽量用enumerate取代range关键:1 enumerate作用: 可以把各种迭代器包装为生成器,方便产生输出值输出: 每次生成一对值,(下标,值)用法示例:for i, value in enumerate(dataList, 1):其中1表示下标从1开始2 总结enum...原创 2019-03-26 08:45:13 · 282 阅读 · 0 评论 -
Effective Python 读书笔记: 第9条: 用生成器表达式来改写数据量较大的列表推导
# -*- encoding: utf-8 -*-import os'''第9条: 用生成器表达式来改写数据量较大的列表推导关键:1 列表推导缺点对输入序列中的每个值可能要创建仅包含一个元素的列表,输入数据多,可能导致崩溃因为把输入数据每一项都保存在内存中。2 生成器表达式优点: 不把输出序列都呈现出来,估值为迭代器,迭代器每次根据生成器表达式产生一项数据。使用方式...原创 2019-03-26 08:34:45 · 119 阅读 · 0 评论 -
Effective Python 读书笔记: 8 不要使用含有两个以上表达式的列表推导
# -*- encoding: utf-8 -*-import sys'''第8条: 不要使用含有两个以上表达式的列表推导关键:1 二层列表推导样例:result = [value for row in matrix for value in row]注意: 二层列表推导,最前面的是外循环,第二层是内循环2 列表推导支持多个if条件处在同一个循环级别中的多项条件是an...原创 2019-03-16 18:43:02 · 142 阅读 · 0 评论 -
Effective Python 读书笔记: 7 用列表推导来取代map和filter
# -*- encoding: utf-8 -*-import sys'''第7条: 用列表推导来取代map和filter关键:1 列表推导含义: 根据一个列表制作另一个列表的表达式2 用列表推导取代map和filtermap(function, arr): 对arr这个序列中每个元素应用function方法,返回处理后的新序列filter(function, arr...原创 2019-03-16 18:24:45 · 167 阅读 · 0 评论 -
Effective Python 读书笔记: 6 在单次切片操作内,不要同时指定start、end和stride
# -*- encoding: utf-8 -*-import sys'''第6条: 在单次切片操作内,不要同时指定start、end和stride关键:1 步进式切割格式: myList[start:end:stride]从每n个元素中取出一个元素stride: 步进值2 一行代码反转字节形式的字符串result = string[::-1]-1表示从尾部开始,向...原创 2019-03-15 21:44:27 · 152 阅读 · 0 评论 -
Effective Python 读书笔记: 5 了解切割序列的办法
# -*- encoding: utf-8 -*-import sys'''第5条: 了解切割序列的办法关键:1 切片作用: 访问序列中某些元素构成的子集写法: myList[start:end],注意不包含end所指的元素myList[-start:] : 表示从倒数第start个开始直到最后一个元素, 注意: 这里的 - 表示倒数....原创 2019-03-15 21:24:46 · 143 阅读 · 0 评论 -
Effective Python 读书笔记: 4 用辅助函数来取代复杂的表达式
# -*- encoding: utf-8 -*-import sys'''第4条: 用辅助函数来取代复杂的表达式关键:1 避免过渡使用python语法特性而写出特别复杂的单行表达式2 复杂表达式用辅助函数表示参考:Effectiv Python 编写高质量Python代码的59个有效方法'''def oneLineVersion(myValues): ...原创 2019-03-15 21:03:00 · 207 阅读 · 0 评论