简介
- 书名:《流畅的Python》
- 作者: 卢西亚诺·拉马略
- 分类: 计算机-编程设计
- ISBN:9787115454157
- 出版社:人民邮电出版社
概述
本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性,避免重复劳动,同时写出简洁、流畅、易读、易维护,并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法,涵盖数据结构、Python风格的对象、并行与并发,以及元编程等不同的方面。
划线
Python官方教程的开头是这样写的:“Python是一门既容易上手又强大的编程语言。”这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多Python程序员只用到了其强大功能的一小部分。
不成熟的抽象和过早的优化一样,都会坏事。
数据模型其实是对Python框架的描述,它规范了这门语言自身构建模块的接口
序列类型还能按照能否被修改来分类。可变序列list、bytearray、array.array、collections.deque和memoryview。不可变序列tuple、str和bytes。
list是一个可变序列,并且能同时存放不同类型的元素
在Python中,函数用*args来获取不确定数量的参数算是一种经典写法了。
seq[start:stop:step]进行求值的时候,Python会调用seq.getitem(slice(start, stop, step))。
如果在a * n这个语句中,序列a里的元素是对其他可变对象的引用的话,你就需要格外注意了,因为这个式子的结果可能会出乎意料。比如,你想用my_list= * 3来初始化一个由列表组成的列表,但是你得到的列表里包含的3个元素其实是3个引用,而且这3个引用指向的都是同一个列表。这可能不是你想要的效果。
Python Tutor是一个对Python运行原理进行可视化分析的工具
不要把可变对象放在元组里面。增量赋值不是一个原子操作。我们刚才也看到了,它虽然抛出了异常,但还是完成了操作。查看Python的字节码并不难,而且它对我们了解代码背后的运行机制很有帮助。
Python序列类型最常见的分类就是可变和不可变序列。但另外一种分类方式也很有用,那就是把它们分为扁平序列和容器序列。
散列表则是字典类型性能出众的根本原因
集合的本质是许多唯一对象的聚集。
不要忘了,如果要创建一个空集,你必须用不带任何参数的构造方法set( )。如果只是写成{}的形式,跟以前一样,你创建的其实是个空字典。
dict的实现是典型的空间换时间:字典类型有着巨大的内存开销,但它们提供了无视数据量大小的快速访问——只要字典能被装在内存里。
Python 3明确区分了人类可读的文本字符串和原始的字节序列。
我指的是b’\xff\xfe’。这是BOM,即字节序标记(byte-order mark),指明编码时使用Intel CPU的小字节序。
__doc__属性用于生成对象的帮助文本。
map函数返回一个可迭代对象,里面的元素是把第一个参数(一个函数)应用到第二个参数(一个可迭代对象,这里是range(11))中各个元素上得到的结果。
接受函数为参数,或者把函数作为结果返回的函数是高阶函数(higher-order function)
all(iterable)如果iterable的每个元素都是真值,返回True;all([])返回True。any(iterable)只要iterable中有元素是真值,就返回True;any([])返回False。
Python简单的句法限制了lambda函数的定义体只能使用纯表达式。换句话说,lambda函数的定义体中不能赋值,也不能使用while和try等Python语句。
lambda句法只是语法糖:与def语句一样,lambda表达式会创建函数对象。这是Python中几种可调用对象的一种。下一节会说明所有可调用对象。
不仅Python函数是真正的对象,任何Python对象都可以表现得像函数。为此,只需实现实例方法__call__。
与用户定义的常规类一样,函数使用__dict__属性存储赋予它的用户属性。
Python最好的特性之一是提供了极为灵活的参数处理机制,而且Python 3进一步提供了仅限关键字参数(keyword-only argument)。
函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。
Python不要求声明变量,但是假定在函数定义体中赋值的变量是局部变量。
Python内置了三个用于装饰方法的函数:property、classmethod和staticmethod。
因为lru_cache使用字典存储结果,而且键根据调用时传入的定位参数和关键字参数创建,所以被lru_cache装饰的函数,它的所有参数都必须是可散列的。
首先,我们要抛弃变量是存储数据的盒子这一错误观念
Python变量类似于Java中的引用式变量,因此最好把它们理解为附加在对象上的标注。
笔记
在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果
💭 感觉这个一等函数好抽象或者是翻译的问题……