简介

  • 书名:《流畅的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中的引用式变量,因此最好把它们理解为附加在对象上的标注。

笔记

在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果

💭 感觉这个一等函数好抽象或者是翻译的问题……

书评

点评