1
0
wiki/Book/计算机/流畅的Python.md

107 lines
5.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 流畅的Python
description: 本书致力于帮助Python开发人员挖掘这门语言及相关程序库的优秀特性避免重复劳动同时写出简洁、流畅、易读、易维护并且具有地道Python风格的代码。本书尤其深入探讨了Python语言的高级用法涵盖数据结构、Python风格的对象、并行与并发以及元
keywords:
- 流畅的Python
- 计算机
tags:
- 阅读/计算机
- 阅读/笔记
author: 7Wate
date: 2023-07-17
---
## 简介
- **书名**《流畅的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中的引用式变量因此最好把它们理解为附加在对象上的标注。
## 笔记
> 在运行时创建
能赋值给变量或数据结构中的元素
能作为参数传给函数
能作为函数的返回结果
💭 感觉这个一等函数好抽象或者是翻译的问题……
## 书评
## 点评