5 Fluent Python

以实践为基础
测试驱动开发TDD:精髓就是先写测试,对自定义类的每一个方法都编写doctest。
核心语言特性:迭代、切片。Talk is cheap. Show me the code.

1 Python数据模型

单下划线:放在名称前,表示其属性为“私有”;在解释器中,指代上一条语句的结果;
双下划线:放在方法名的前面,被认为是“_className__methodName”,不能被改变;放在名称的前、后,表示内置的特殊方法名
内置函数repr,把一个对象用字符串形式表达;str方法返回的字符串对终端用户更友好。(即%r & %s)
特殊方法一览表:敲代码过程中,逐渐熟悉。对序列数据类型的模拟,是特殊方法使用最多的地方。

2 数据结构

列表推导 list comprehension
(等同于map/filter
生成器表达式 generator expression
语法:把方括号换成圆括号;逐个产出元素,更节省内存;不要把可变对象放在元组里面。
Python惯例:如果一个函数或者方法对对象进行了就地改动,那它就应该返回None,传入参数有变动,并且未产生新对象。
sorted新建一个列表作为返回值,接受任何的可迭代对象,包括不可变序列、生成器,最后一定返回列表。
bisect管理已排序的序列(搜索、插入)
列表的替换类型
array.array 只包含数字的列表
memoryview 用不同的方式读写同一块内存,能在不复制内容的情况下操作同一个数组的不同切片
numpy.ndarray NumPy/SciPy专为线性代数、数值积分和统计学而设计
collections.deque 快速从两端添加或者删除元素
容器序列
list, tuple, collections.deque 存放任意类型的对象的引用
扁平序列
str, bytes, bytearray, memoryview, array.array 存放字符、字节、数值等基础类型,是一段连续的内存空间
元组
# 拆包
_, filename = os.path.split('/home/luciano/.ssh/idrsa.pub')

# 具名元组
City = collections.namedtuple('City', 'name country population coordinates')
tokyo = City('Tokyo', 'JP', 36.933, (35.689722, 139.691667))

切片、区间左闭右开的原因
符合以0为起始下标的传统;快速计算元素的个数;可以用任意一个下标,把序列分隔成不重叠的两部分,即myLst[:x] & myLst[x:]
字典、集合、散列表
集合 许多唯一对象的聚集;大括号。
# 用于所有可迭代对象
found = len(set(needles) & set(haystack))
found = len(set(needles).intersection(haystack))
字典推导 dict comprehension; 集合推导 setcomps
# 元组的列表
country_code = {country: code for code, country in DIAL_CODES}
# 比get(),多一步操作:键不存在,则添加键-默认值;很实用!
wordCountDict.setdefault(word, [])
字典的替换类型
collections.OrderedDict/ChainMap/Counter/UserDict
划重点!

  • 稀疏:总是有空白元素的数组。
  • 不管查询有多少个元素的字典或集合(不超过内存大小),所耗费的时间都能忽略不计。
  • 但字典在内存上的开销巨大;存放数量巨大的记录,最好放在由元组或具名元组构成的列表中:第一是避免了散列表所耗费的空间,第二是无需把记录中字段的名字在每个元素里都存一遍。
  • 往字典里添加新键有可能改变已有键的顺序:所以不要对字典同时进行遍历和修改,最好分两步进行。

文本和字节序列
bytes/bytearray
构造方法要求的传参:str + encoding; 可迭代对象 + 0~255; 已实现缓冲协议的对象
Unicode三明治:尽早把输入的字节序列解码为字符串;只处理字符串对象;尽量晚把字符串编码为字节序列(文本)。
在多台设备、多种场合下运行的代码,一定不能依赖默认编码,明确传入encoding=参数。

3 函数即对象

高阶函数 map/reduce/filter
callable() 7类可调用对象
类的call方法:让类的实例作为函数调用——‘快捷方式’
函数内省:一些默认参数
传参:*content存入元组;**attrs存入字典;仅限关键字参数
注解(python 3):传参text:str;函数clip()->str;类或者字符串

装饰器是语法糖。把被装饰的函数替换成其他函数;在加载模块时立即执行。
被装饰的函数只在明确调用时运行(区别:导入、运行)
多数装饰器都会修改被装饰函数;先定义一个内部函数,然后将其返回,替换被装饰函数。
functools.lru_cache备忘;singledispatch泛函数;
python不支持重载方法或函数?

闭包,指延伸了作用域的函数,关键在于能访问定义体之外定义的非全局变量。
闭包是一种函数,它会保留定义函数时存在的自由变量的绑定。
nonlocal(python 3):把变量标记为自由变量

4 面向对象思维(第8-13章)

引用式变量:正确理解“把变量s分配给seesaw”“变量只是附加在对象上的标注”
id函数、is比较对象的标识(运算速度快,x is None);==比较对象的值
默认浅拷贝:构造方法或[:];最外层容器
任意对象的深、浅拷贝:copy.deepcopy()copy.copy()
不要使用可变类型作为参数默认值,如[];防止调用方修改可变参数
垃圾回收:引用计数归零,对象立即被销毁。每个对象都会统计有多少引用指向自己。
classmethod装饰器
格式化显示:format_spec 格式规范微语言(各个类自行扩展:format方法
format(rmb, '0.2f') '1 RMB = {rate:0.2f} USD'.format(rate=rmb)
默认format(obj) = str(obj)
私有属性避免继承:_Vector2d__x “名称改写”
更加pythonic:创建一个子类,只用于定制类的数据属性

第10章 多维向量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,398评论 6 532
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,510评论 3 416
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,346评论 0 374
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,972评论 1 311
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,739评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,196评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,260评论 3 441
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,413评论 0 288
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,951评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,779评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,980评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,522评论 5 359
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,217评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,647评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,887评论 1 286
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,659评论 3 391
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,967评论 2 374

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,782评论 18 139
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 1,257评论 0 0
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,050评论 6 13
  • 林中树繁茂 鸟儿安窝家园建 世代幸福无忧烦 绿海畅翔 好惬意 日日习练 本领强 护家爱园 幸福长
    六月天气阅读 331评论 29 48
  • 文 | 佳霖 || 图 | 佳霖 莫名我就喜欢你深深地爱上你没有理由没有原因 这许多年里的无疑是十分幸...
    Galen佳阅读 840评论 5 1