Python学习手册(第4版)pdf

2019年3月31日15:24:11 发表评论 53

Python学习手册(第4版) 内容简介

《Python学习手册(第4版)》学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他工具,以便构建较大的组件。学习Python的面向对象编程工具,用于组织程序代码。学习异常处理模型,以及用于编写较大程序的开发工具。了解高级Python工具,如装饰器、描述器、元类和Unicode处理等。

Python学习手册(第4版) 目录

前言

第一部分 使用入门

第1章 问答环节

人们为何使用Python

软件质量

开发效率

Python是“脚本语言”吗

好吧,Python的缺点是什么呢

如今谁在使用Python

使用Python可以做些什么

系统编程

用户图形接口

Internet脚本

组件集成

数据库编程

快速原型

数值计算和科学计算编程

游戏、图像、人工智能、XML、机器人等

Python如何获得支持

Python有哪些技术上的优点

面向对象

免费

可移植

功能强大

可混合

简单易用

简单易学

Python和其他语言比较起来怎么样

本章小结

本章习题

习题解答

Python是工程,不是艺术

第2章 Python如何运行程序

Python解释器简介

程序执行

程序员的视角

Python的视角

执行模块的变体

Python实现的替代者

执行优化工具

冻结二进制文件

其他执行选项

未来的可能性

本章小结

本章习题

习题解答

第3章 如何运行程序

交互提示模式下编写代码

交互地运行代码

为什么使用交互提示模式

使用交互提示模式

系统命令行和文件

第一段脚本

使用命令行运行文件

使用命令行和文件

UNIX可执行脚本(#!)

UNIX env查找技巧

点击文件图标

在Windows中点击图标

input的技巧

图标点击的其他限制

模块导入和重载

模块的显要特性:属性

import和reload的使用注意事项

使用exec运行模块文件

IDLE用户界面

IDLE基础

使用IDLE

高级IDLE工具

其他的IDE

其他启动选项

嵌入式调用

冻结二进制的可执行性

文本编辑器启动的选择

其他的启动选择

未来的可能

我应该选用哪种

调试Python代码

本章小结

本章习题

习题解答

第一部分 练习题

第二部分 类型和运算

第4章 介绍Python对象类型

为什么使用内置类型

Python的核心数据类型

数字

字符串

序列的操作

不可变性

类型特定的方法

寻求帮助

编写字符串的其他方法

模式匹配

列表

序列操作

类型特定的操作

边界检查

嵌套

列表解析

字典

映射操作

重访嵌套

键的排序:for 循环

迭代和优化

不存在的键:if 测试

元组

为什么要用元组

文件

其他文件类工具

其他核心类型

如何破坏代码的灵活性

用户定义的类

剩余的内容

本章小结

本章习题

习题解答

第5章 数字

Python的数字类型

数字常量

内置数学工具和扩展

Python表达式操作符

在实际应用中的数字

变量和基本的表达式

数字显示的格式

比较:一般的和连续的

str和repr显示格式

除法: 传统除法、Floor除法和真除法

整数精度

复数

十六进制、八进制和二进制记数

位操作

其他的内置数学工具

其他数字类型

小数数字

分数类型

集合

布尔型

数字扩展

本章小结

本章习题

习题解答

第6章 动态类型简介

缺少类型声明语句的情况

变量、对象和引用

类型属于对象,而不是变量

对象的垃圾收集

共享引用

共享引用和在原处修改

共享引用和相等

动态类型随处可见

本章小结

本章习题

习题解答

第7章 字符串

字符串常量

单双引号字符串是一样的

用转义序列代表特殊字节

raw字符串抑制转义

三重引号编写多行字符串块

实际应用中的字符串

基本操作

索引和分片

为什么要在意:分片

字符串转换工具

修改字符串

字符串方法

字符串方法实例:修改字符串

字符串方法实例:文本解析

实际应用中的其他常见字符串方法

最初的字符串模块(在Python 3.0中删除)

字符串格式化表达式

更高级的字符串格式化表达式

基于字典的字符串格式化

字符串格式化调用方法

基础知识

添加键、属性和偏移量

添加具体格式化

与%格式化表达式比较

为什么用新的格式化方法

通常意义下的类型分类

同样分类的类型共享其操作集合

可变类型能够在原处修改

本章小结

本章习题

习题解答

第8章 列表与字典

列表

实际应用中的列表

基本列表操作

列表迭代和解析

索引、分片和矩阵

原处修改列表

字典

实际应用中的字典

字典的基本操作

原处修改字典

其他字典方法

语言表

字典用法注意事项

为什么要在意字典接口

创建字典的其他方法

Python 3.0中的字典变化

本章小结

本章习题

习题解答

第9章 元组、文件及其他

元组

实际应用中的元组

为什么有了列表还要元组

文件

打开文件

使用文件

实际应用中的文件

其他文件工具

重访类型分类

为什么要在意操作符重载

对象灵活性

引用 VS 拷贝

比较、相等性和真值

Python 3.0的字典比较

Python中真和假的含义

Python的类型层次

Type对象

Python中的其他类型

内置类型陷阱

赋值生成引用,而不是拷贝

重复能够增加层次深度

留意循环数据结构

不可变类型不可以在原处改变

本章小结

本章习题

习题解答

第二部分练习题

第三部分 语句和语法

第10章 Python语句简介

重访Python程序结构

Python的语句

两个if的故事

Python增加了什么

Python删除了什么

为什么使用缩进语法

几个特殊实例

简短实例:交互循环

一个简单的交互式循环

对用户输入数据做数学运算

用测试输入数据来处理错误

用try语句处理错误

嵌套代码三层

本章小结

本章习题

习题解答

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

赋值语句

赋值语句的形式

序列赋值

Python 3.0中的扩展序列解包

多目标赋值语句

增强赋值语句

变量命名规则

Python的废弃协议

表达式语句

表达式语句和在原处的修改

打印操作

Python 3.0的print函数

Python 2.6 print语句

打印流重定向

版本独立的打印

为什么要注意print和stdout

本章小结

本章习题

习题解答

第12章 if测试和语法规则

if语句

通用格式

基本例子

多路分支

Python语法规则

代码块分隔符

语句的分隔符

一些特殊情况

真值测试

if/else三元表达式

为什么要在意布尔值

本章小结

本章习题

习题解答

第13章 while和for循环

while循环

一般格式

例子

break、continue、pass和循环else

一般循环格式

pass

continue

break

循环else

为什么要在意“模拟C 语言的while循环”

for循环

一般格式

例子

为什么要在意“文件扫描”

编写循环的技巧

循环计数器:while和range

非完备遍历:range和分片

修改列表:range

并行遍历:zip和map

产生偏移和元素:enumerate

本章小结

本章习题

习题解答

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

迭代器:初探

文件迭代器

手动迭代:iter和next

其他内置类型迭代器

列表解析:初探

列表解析基础知识

在文件上使用列表解析

扩展的列表解析语法

其他迭代环境

Python 3.0中的新的可迭代对象

range迭代器

map、zip和filter迭代器

多个迭代器 VS单个迭代器

字典视图迭代器

其他迭代器主题

本章小结

本章习题

习题解答

第15章 文档

Python文档资源

#注释

dir函数

文档字符串:__doc__

PyDoc:help函数

PyDoc:HTML报表

标准手册集

网络资源

已出版的书籍

常见编写代码的陷阱

本章小结

本章习题

习题解答

第三部分练习题

第四部分 函数

第16章 函数基础

为何使用函数

编写函数

def语句

def语句是实时执行的

第一个例子:定义和调用

定义

调用

Python中的多态

第二个例子:寻找序列的交集

定义

调用

重访多态

本地变量

本章小结

本章习题

习题解答

第17章 作用域

Python作用域基础

作用域法则

变量名解析:LEGB原则

作用域实例

内置作用域

在Python 2.6中违反通用性

global语句

最小化全局变量

最小化文件间的修改

其他访问全局变量的方法

作用域和嵌套函数

嵌套作用域的细节

嵌套作用域举例

nonlocal语句

nonlocal基础

nonlocal应用

为什么使用nonlocal

本章小结

本章习题

习题解答

第18章 参数

传递参数

参数和共享引用

避免可变参数的修改

对参数输出进行模拟

特定的参数匹配模型

基础知识

匹配语法

细节

关键字参数和默认参数的实例

任意参数的实例

Python 3.0 Keyword-Only参数

min调用

满分

加分点

结论

一个更有用的例子:通用set函数

模拟Python 3.0 print函数

使用Keyword-Only参数

为什么要在意:关键字参数

本章小结

本章习题

习题解答

第19章 函数的高级话题

函数设计概念

递归函数

用递归求和

编码替代方案

循环语句VS递归

处理任意结构

函数对象:属性和注解

间接函数调用

函数内省

函数属性

Python 3.0中的函数注解

匿名函数: lambda

lambda表达式

为什么使用lambda

如何(不要)让Python代码变得晦涩难懂

嵌套lambda和作用域

为什么要在意:回调

在序列中映射函数:map

函数式编程工具:filter和reduce

本章小结

本章习题

习题解答

第20章 迭代和解析,第二部分

回顾列表解析:函数式编程工具

列表解析与map

增加测试和嵌套循环

列表解析和矩阵

理解列表解析

为什么要在意:列表解析和map

重访迭代器:生成器

生成器函数:yield VS return

生成器表达式:迭代器遇到列表解析

生成器函数 VS 生成器表达式

生成器是单迭代器对象

用迭代工具模拟zip和map

为什么你会留意:单次迭代

内置类型和类中的值生成

Python 3.0解析语法概括

解析集合和字典解析

针对集合和字典的扩展的解析语法

对迭代的各种方法进行计时

对模块计时

计时脚本

计时结果

计时模块替代方案

其他建议

函数陷阱

本地变量是静态检测的

默认和可变对象

没有return语句的函数

嵌套作用域的循环变量

本章小结

本章习题

习题解答

第四部分练习题

第五部分 模块

第21章 模块:宏伟蓝图

为什么使用模块

Python程序架构

如何组织一个程序

导入和属性

标准库模块

import如何工作

1.搜索

2.编译(可选)

3.运行

模块搜索路径

配置搜索路径

搜索路径的变动

sys.path列表

模块文件选择

高级的模块选择概念

第三方工具:distutils

本章小结

本章习题

习题解答

第22章 模块代码编写基础

模块的创建

模块的使用

import语句

from语句

from *语句

导入只发生一次

import和from是赋值语句

文件间变量名的改变

import和from的对等性

from语句潜在的陷阱

模块命名空间

文件生成命名空间

属性名的点号运算

导入和作用域

命名空间的嵌套

重载模块

reload基础

reload实例

为什么要在意:模块重载

本章小结

本章习题

习题解答

第23章 模块包

包导入基础

包和搜索路径设置

__init__.py包文件

包导入实例

包对应的from语句和import语句

为什么要使用包导入

三个系统的传说

包相对导入

Python 3.0中的变化

相对导入基础知识

为什么使用相对导入

相对导入的作用域

模块查找规则总结

相对导入的应用

为什么要在意:模块包

本章小结

本章习题

习题解答

第24章 高级模块话题

在模块中隐藏数据

最小化from *的破坏:_X和__all__

启用以后的语言特性

混合用法模式:__name__和__main__

以__name__进行单元测试

使用带有__name__的命令行参数

修改模块搜索路径

Import语句和from语句的as扩展

模块是对象:元程序

用名称字符串导入模块

过渡性模块重载

模块设计理念

模块陷阱

顶层代码的语句次序的重要性

from复制变量名,而不是连接

from *会让变量语义模糊

reload不会影响from导入

reload、from以及交互模式测试

递归形式的from导入无法工作

本章小结

本章习题

习题解答

第五部分练习题

第六部分 类和OOP

第25章 OOP:宏伟蓝图

为何使用类

概览OOP

属性继承搜索

类和实例

类方法调用

编写类树

OOP是为了代码重用

本章小结

本章习题

习题解答

第26章 类代码编写基础

类产生多个实例对象

类对象提供默认行为

实例对象是具体的元素

第一个例子

类通过继承进行定制

第二个例子

类是模块内的属性

类可以截获Python运算符

第三个例子

为什么要使用运算符重载

世界上最简单的Python类

类与字典的关系

本章小结

本章习题

习题解答

第27章 更多实例

步骤1:创建实例

编写构造函数

在进行中测试

以两种方式使用代码

版本差异提示

步骤2:添加行为方法

编写方法

步骤3:运算符重载

提供打印显示

步骤4:通过子类定制行为

编写子类

扩展方法:不好的方式

扩展方法:好的方式

多态的作用

继承、定制和扩展

OOP:大思路

步骤5:定制构造函数

OOP比我们认为的要简单

组合类的其他方式

在Python 3.0中捕获内置属性

步骤6:使用内省工具

特殊类属性

一种通用显示工具

实例与类属性的关系

工具类的命名考虑

类的最终形式

步骤7(最后一步):把对象存储到数据库中

Pickle和Shelve

在shelve数据库中存储对象

交互地探索shelve

更新shelve中的对象

未来方向

本章小结

本章习题

习题解答

第28章 类代码编写细节

class语句

一般形式

例子

方法

例子

调用超类构造函数

其他方法调用的可能性

继承

属性树的构造

继承方法的专有化

类接口技术

抽象超类

Python 2.6和Python 3.0的抽象超类

命名空间:完整的内容

简单变量名:如果赋值就不是全局变量

属性名称:对象命名空间

Python命名空间的“禅”:赋值将变量名分类

命名空间字典

命名空间链接

回顾文档字符串

类与模块的关系

本章小结

本章习题

习题解答

第29章 运算符重载

基础知识

构造函数和表达式:__init__和__sub__

常见的运算符重载方法

索引和分片:__getitem__和__setitem__

拦截分片

Python 2.6中的分片和索引

索引迭代:__getitem__

迭代器对象:__iter__和__next__

用户定义的迭代器

有多个迭代器的对象

成员关系:__contains__、__iter__和__getitem__

属性引用:__getattr__和__setattr__

其他属性管理工具

模拟实例属性的私有性:第一部分

__repr__和__str__会返回字符串表达形式

右侧加法和原处加法:__radd__和__iadd__

原处加法

Call表达式:__call__

函数接口和回调代码

比较:__lt__、__gt__和其他方法

Python 2.6的__cmp__方法(已经从Python 3.0中移除了)

布尔测试:__bool__和__len__

Python 2.6中的布尔

对象析构函数:__del__

本章小结

本章习题

习题解答

第30章 类的设计

Python和OOP

通过调用标记进行重载(或不要)

OOP和继承:“是一个”关系

OOP和组合:“有一个”关系

重访流处理器

为什么要在意:类和持续性

OOP和委托:“包装”对象

类的伪私有属性

变量名压缩概览

为什么使用伪私有属性

方法是对象:绑定或无绑定

在Python 3.0中,无绑定方法是函数

绑定方法和其他可调用对象

为什么要在意:绑定方法和回调函数

多重继承:“混合”类

编写混合显示类

类是对象:通用对象的工厂

为什么有工厂

与设计相关的其他话题

本章小结

本章习题

习题解答

第31章 类的高级主题

扩展内置类型

通过嵌入扩展类型

通过子类扩展类型

新式类

新式类变化

类型模式变化

钻石继承变动

新式类的扩展

slots实例

类特性

__getattribute__和描述符

元类

静态方法和类方法

为什么使用特殊方法

Python 2.6和Python 3.0中的静态方法

静态方法替代方案

使用静态和类方法

使用静态方法统计实例

用类方法统计实例

装饰器和元类:第一部分

函数装饰器基础

装饰器例子

类装饰器和元类

更多详细信息

类陷阱

修改类属性的副作用

修改可变的类属性也可能产生副作用

多重继承:顺序很重要

类、方法以及嵌套作用域

Python中基于委托的类:__getattr__和内置函数

“过度包装”

本章小结

本章习题

习题解答

第六部分 练习题

为什么要在意:大师眼中的OOP

第七部分 异常和工具

第32章 异常基础

为什么使用异常

异常的角色

异常处理:简明扼要

默认异常处理器

捕获异常

引发异常

用户定义的异常

终止行为

为什么要在意:错误检查

本章小结

本章习题

习题解答

第33章 异常编码细节

try/except/else语句

try语句分句

try/else分句

例子:默认行为

例子:捕捉内置异常

try/finally语句

例子:利用try/finally编写终止行为

统一try/except/finally语句

统一try语句语法

通过嵌套合并finally和except

合并try的例子

raise语句

利用raise传递异常

Python 3.0异常链:raise from

assert语句

例子:收集约束条件(但不是错误)

with/as环境管理器

基本使用

环境管理协议

本章小结

本章习题

习题解答

第34章 异常对象

异常:回到未来

字符串异常很简单

基于类的异常

类异常例子

为什么使用类异常

内置Exception类

内置异常分类

默认打印和状态

定制打印显示

定制数据和行为

提供异常细节

提供异常方法

本章小结

本章习题

习题解答

第35章 异常的设计

嵌套异常处理器

例子:控制流程嵌套

例子:语法嵌套化

异常的习惯用法

异常不总是错误

函数信号条件和raise

关闭文件和服务器连接

在try外进行调试

运行进程中的测试

关于sys.exc_info

与异常有关的技巧

应该包装什么

捕捉太多:避免空except语句

捕捉过少:使用基于类的分类

核心语言总结

Python工具集

大型项目的开发工具

本章小结

第七部分练习题

第八部分 高级话题注

第36章 Unicode和字节字符串

Python 3.0中的字符串修改

字符串基础知识

字符编码方法

Python的字符串类型

文本和二进制文件

Python 3.0中的字符串应用

常量和基本属性

转换

编码Unicode字符串

编码ASCII文本

编码非ASCII文本

编码和解码非ASCII文本

其他Unicode编码技术

转换编码

在Python 2.6中编码Unicode字符串

源文件字符集编码声明

使用Python 3.0 Bytes对象

方法调用

序列操作

创建bytes对象的其他方式

混合字符串类型

使用Python 3.0(和Python 2.6)bytearray对象

使用文本文件和二进制文件

文本文件基础

Python 3.0中的文本和二进制模式

类型和内容错误匹配

使用Unicode文件

在Python 3.0中读取和写入Unicode

在Python 3.0中处理BOM

Python 2.6中的Unicode文件

Python 3.0中其他字符串工具的变化

re模式匹配模块

Struct二进制数据模块

pickle对象序列化模块

XML解析工具

本章小结

本章习题

习题解答

第37章 管理属性

为什么管理属性

插入在属性访问时运行的代码

特性

基础知识

第一个例子

计算的属性

使用装饰器编写特性

描述符

基础知识

第一个示例

计算的属性

在描述符中使用状态信息

特性和描述符是如何相关的

__getattr__和__getattribute__

基础知识

第一个示例

计算属性

__getattr__和__getattribute__比较

管理技术比较

拦截内置操作属性

重访基于委托的Manager

示例:属性验证

使用特性来验证

使用描述符验证

使用__getattr__来验证

使用__getattribute__验证

本章小结

本章习题

习题解答

第38章 装饰器

什么是装饰器

管理调用和实例

管理函数和类

使用和定义装饰器

为什么使用装饰器

基础知识

函数装饰器

类装饰器

装饰器嵌套

装饰器参数

装饰器管理函数和类

编写函数装饰器

跟踪调用

状态信息保持选项

类错误之一:装饰类方法

计时调用

添加装饰器参数

编写类装饰器

单体类

跟踪对象接口

类错误之二:保持多个实例

装饰器与管理器函数的关系

为什么使用装饰器(重访)

直接管理函数和类

示例:“私有”和“公有”属性

实现私有属性

实现细节之一

公有声明的泛化

实现细节之二

开放问题

Python不是关于控制

示例:验证函数参数

目标

针对位置参数的一个基本范围测试装饰器

针对关键字和默认泛化

实现细节

开放问题

装饰器参数 VS 函数注解

其他应用程序:类型测试

本章小结

本章习题

习题解答

第39章 元类

要么是元类,要么不是元类

提高魔力层次

“辅助”函数的缺点

元类与类装饰器的关系:第一回合

元类模型

类是类型的实例

元类是Type的子类

Class语句协议

声明元类

编写元类

基本元类

定制构建和初始化

其他元类编程技巧

实例与继承的关系

示例:向类添加方法

手动扩展

基于元类的扩展

元类与类装饰器的关系:第二回合

示例:对方法应用装饰器

用装饰器手动跟踪

用元类和装饰器跟踪

把任何装饰器应用于方法

元类与类装饰器的关系:第三回合

“可选的”语言功能

本章小结

本章习题

习题解答

第九部分 附录注

附录A 安装和配置

附录B 各部分练习题的解答

Python学习手册(第4版) 精彩文摘

除了较大的结构性目标,类设计往往也必须解决名称用法。在第五部分中,我们学到了每个在模块文件顶层赋值的变量名都会导出。在默认情况下,类也是这样:数据隐藏是一个惯例,客户端可以读取或修改任何它们想要的类或实例的属性。事实上,用C++术语来讲,属性都是“public”和“virtual”,在任意地方都可进行读取,并且在运行时进行动态查找。如今依然如此。然而,Python也支持变量名压缩(mangling,相当于扩张)的概念,让类内某些变量局部化。压缩后的变量名有时会被误认为是“私有属性”,但这其实只是一种把类所创建的变量名局部化的方式而已:名称压缩并无法阻止类外代码对它的读取。这种功能主要是为了避免实例内的命名空间的冲突,而不是限制变量名的读取。因此,压缩的变量名最好称为“伪私有”,而不是“私有”。伪私有变量名是高级且完全可选的功能,除非你开始在多人的项目中编写大型的类的层次,否则可能不会觉得有什么用处。实际上,即便当它们可能应该使用的时候,也并非总是使用它们——更通俗地说,Python程序员用一个单个的下划线来编写内部名称(例如,X),这只是一个非正式的惯例,让你知道这是一个不应该修改的名字(它对Python自身来说没有什么意义)。

图书网:Python学习手册(第4版)pdf

此资源下载价格为2图书币,请先
会员充值限时优惠:充30图书币送10图书币,每个会员仅一次优惠(此活动截止五月底)。
  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: