Python 学习手册(第四版)读书笔记

Table of Contents

1 第一部分

2 第二部分 类型和运算

2.1 第 4 章 介绍 Python 对象类型

  • python 程序可以分解为模块、语句、表达式以及对象。
    • 程序由模块构成。
    • 模块包含语句。
    • 语句包含表达式。
    • 表达式建立并处理对象。
  • 像函数、模块和类这样的编程单元在 Python 中也是对象。
  • 运行的表达式语法决定了创建和使用的对象的类型。(C 中是由变量声明决定的)
  • 对象是数据和操作的集合。
  • repr 是对象的代码形式,str 是对象的用户友好形式。
  • 序列中元素包含了一个从左到右的顺序,比如,字符串,列表,元组。
  • 序列负的所引号会简单的与序列的长度相加。
  • 序列的切片操作是左开右毕区间。
  • 每一个对象都有不可变性或者可变性。核心类型中,数字、字符串、和元组是不可变的,列表和字典是可变的。
  • 可用于多种类型的通用操作是以内置函数或表达式形式出现的,类型特定操作是方法调用形式出现的。
  • 列表
    • 特定操作由:append、pop、sort、reverse、列表解析
    • 列表解析:通过对序列中的每一项运行一个表达式来创建新列表。
    • 括号中的解析语法可以用来创建产生结果的生成器。
  • 字典
    • 字典不是序列。
    • 排序方法:
      • for key in list(D.keys()).sort()
      • for key in sorted(D)
    • 列表解析和相关的函数编程工具通常比 for 循环快(也许快了两倍):这是对大数据集合的应用程序由重大影响的特性之一。
    • 判断键是否存在:
      • in 关系表达式
      • get 方法
      • if/else 表达式
  • 元组
    • 用处在于其不可变性。
  • 集合是不可变对象的无序集合。
  • 我们编写对象接口而不是类型接口。

2.2 第 5 章 数字

  • 数字是一组类似类型的分类。
  • 转换函数:0[x|X]、0[o|O]、0[b|B]、int(str, base)
  • python 表达式操作符
  • (…)语法可以用于生成器表达式,生成器 表达式是产生所需结果的列表解析的一种形式,而不是构建一个最终的列表。
  • 比较操作符可以连续使用。
  • 混合类型自动升级:
    • Python 首先将被操作的对象转换成其中最复杂的操作对象的类型。
    • 混合类型转换仅仅在数字类型混合到一个表达式中的时候才适用。一般不会在其他的类型之间进行转换。
  • Floor 除法和截除法的区别。
  • 集合
    • 集合对象的特有操作。
    • 集合只能包含不可变的类型。
    • 集合解析构造。

2.3 第 6 章 动态类型简介

  • 动态类型是 Python 语言灵活性的根源。
  • 每个对象都有两个标准的头部信息:类型标志符和引用计数器。
  • 类型属于对象而不是变量。
  • 变量总是一个指向对象的指针。

2.4 第 7 章 字符串

  • 常见字符串操作和表达式
  • python 自动在任意的表达式中合并相邻的字符串常量。如果在字符串之间增加逗号会创建一个元组。
  • 可以使用负数作为分片时候的步进,实际效果就是将序列进行反转。
  • python3.0 中字符串方法调用。
  • 表达式和方法的区别:表达式是通过的,可用与多种类型。方法是类型特定的,只能用于单一数据类型上。
  • 三种字符串类型:str、bytes、bytearray。
  • 正式的来说,python 中由三个主要类型(以及操作)的分类:数字(整数、浮点数、二进制等),序列(字符串、列表、元组),映射(字典)。

2.5 第 8 章 列表与字典

  • 列表
    • L.append(x)与 L+[x]不同的是前者原地修改 L,后者生成新的列表。
    • extend 函数在末尾插入多个元素。
  • 字典
    • update 方法来进行合并。
    • python3 中的字典变化。

2.6 第 9 章 元组、文件及其他

  • 为什么有了列表还要元组:元组的不可变性提供了某种完整性。
  • 无条件值的分片以及字典的 copy 方法只能做顶层复制。
  • python 的比较总是检查对象的所有部分,直到可以得出结果位置。
  • 真和假:
    • 数字如果非 0 则为真。
    • 其他对象如果非空,则为真。
  • 类型本身也是对象类型。

3 第三部分 语法和句法

3.1 第 10 章 Python 语句简介

  • 同一条 try 语句中使用 except 和 finally 都可以。
  • python 的目标之一是让程序员少打些字让生活轻松一些。
  • 所有的复合语句都是首行以冒号结尾。
  • 测试条件两端的括号是可选的。
  • 终止行就是终止语句。
    • 特例:某行多个语句使用分号分开,但是只能把简单语句放在一起。
    • 语句跨行:只要使用一对括号把语句括起来就可以。
  • 缩进的结束就是代码块的结束。
    • 符合语句的主体可以出现在 python 首行冒号之后,但是主体只能是简单语句。
  • 不应该在同一段 python 代码中混合使用制表符和空格。

3.2 第 11 章 赋值、表达式和打印

  • 赋值语句形式:

    • 基本形式
    • 元组赋值运算(位置性)
    • 列表赋值运算(位置性)

    从内部实现上来看,元组和列表赋值运算 Python 会先在右边制作元素的元组。

    • 序列赋值运算(通用性)
      • 任何变量名的序列都可以赋值给任何值的序列,只要两边数目相同即可。
      • 元组和列表赋值是序列赋值的特殊形式。
      • 分解赋值语句也是一种交换两个变量的值,却不需要自行创建临时变量的方式。
    • 扩展的序列解包(Python3.0)
      • 这为手动分片操作的结果赋值提供了一种简单的替代手段。
      • 这和分片内在的相似,但是不完全相同。一个序列解包赋值总是返回多个匹配项的一个列表,而分片把相同类型的一个序列作为分片的对象返回。
      • 如果有多个带星号的名称,或者如果值少了而没有带星号的名称,以及如果带星号的名称自身没有编写到一个列表中,都将会引发错误。
    • 多目标赋值运算
    • 增强赋值运算
  • 命名惯例
    • 以单一下划线开头的变量名( _X )不会被 from module import * 语句导入。
    • 前后都有下划线的变量名( _X_ )是系统定义的变量名,对解释器有特殊意义。
    • 以两下划线开头、但结尾没有两个下划线的变量名( __X )是类的本地变量。
    • 通过交互模式运行时,只有单个下划线的变量名( _ )会保存最后表达式的结果。
  • 表达式语句
    • 虽然表达式在 Python 中可作为语句出现,但是语句不能用作表达式。

3.3 第 12 章 if 测试和语法规则

  • if 使用 elif 做分支。
  • 多路分支
    • 写成一系列的 if/elif 测试,
    • 或者对字典进行索引或搜索列表。
      • 字典默认值能编码到 has_key 测试,get 方法调用或异常捕获中。
      • 位于一条 if 语句中的 in 成员也有同样的默认效果。
  • 缩进是 Python 语法的一部分,而不只是编码风格。
  • 真值测试:
    • 任何非零数字或非空对象都为真。
    • 数字零、空对象以及特殊对象 None 都被认作是假。
    • 比较和相等测试都会递归的应用在数据结构中。
    • 比较和相等测试都会返回 Ture 或 False。
    • 布尔 and 和 or 运算符会返回真或假的操作对象。
  • if/else 三元表达式 A = Y if X else Z

3.4 第 13 章 while 和 for 循环

  • 循环 else:
    • 控制权离开循环而又没有碰到 break 语句时才会执行。
    • 和循环 else 子句结合时,break 语句通常可以忽略其他语言中所需的搜索状态标志位。
  • for 循环十一个通过的序列迭代器:可以便利任何 有序 的序列对象内的元素。
  • for line in open('test.txt'):这通常是恩见的最佳选择,除了简单,对任意大小的文件都有效,不会一次把文件都载入内存。
  • for 比 while 容易写,执行也比较快,应该作为遍历序列首选工具。
  • zip 并行遍历
  • enumerate 产生偏移和元素。
  • while 和 for 的主要功能区别是:while 一条通用的循环语句,for 循环主要用来在一个序列中遍历各项。

3.5 第 14 章 迭代器和解析,第一部分

  • 列表解析是对迭代中的项应用一个表达式的 for 循环的一种近似形式。
  • 迭代工具可以用于任何可迭代的对象。
  • 迭代工具包括:
    • 返回列表:列表解析、字典解析、集合解析、sorted
    • 返回可迭代对象:for 循环、in 成员关系测试、map、zip、enumerate、filter、reduce
  • 可迭代对象就是序列观念的通用化,如果对象可以在迭代工具环境中一次产生一个结果的对象,就看做是可迭代的。
  • 迭代工具通过迭代器操作可迭代对象。迭代器实现了迭代协议,也就是 __next__ 方法。
  • 可迭代的对象一次返回一个结果,而不是一个实际的列表。
  • 可迭代对象有时候就是自己的迭代器,有时候需要调用 iter 返回迭代器。比如文件对象就是自己的迭代器,列表以及很多内置对象不是自身的迭代器。
  • 迭代器在 Python 中是以 C 语言运行的。
  • 字典有一个迭代器,每次返回一个键。
  • 列表解析与 for 不同,它产生一个新的列表对象。而且列表解析比手动的 for 循环更快。
  • 扩展的列表解析语法可以包含 if 语句过滤那些测试不为真的结果。
  • 字典的 keys、values、items 方法返回字典视图迭代器,他们一次产生一个结果项。

3.6 第 15 章 文档

  • #注释只能从源代码文件中看到。
  • 文档字符串最适合较大型功能的文档(模块、类、函数),#注释适合做较小功能的文档(表达式)。
  • 可以通过 PyDoc GUI 模块查看位于导入搜索路径上的用户定义模块以及动态连接的 C 程序模块。

4 第四部分 函数

4.1 第 16 章 函数基础

4.2 第 17 章 作用域

4.3 第 18 章 参数

5 第五部分

6 第六部分

7 第七部分 异常和工具

7.1 第 32 章 异常基础

Author: lsl

Created: 2016-08-07 Sun 19:07

Validate