python学习手册-Python学习手册

Python学习手册第4 版将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。

Python学习手册第4版每一章都包含关于Python语言的关键内容的独立的一课,并且包含了一个独特的"练习题”部分,其中带有实际的练习和测试,以便你可以练习新的技能并随着学习而测试自己的理解。你会发现众多带有注释的示例以及图表,它们将帮助你开始学习Python 3.0。

内容简介:

学习Python的主要内建对象类型:数字、列表和字典。

使用Python语句创建和处理对象,并且学习Python的通用语法模型。

使用函数构造和重用代码,函数是Python的基本过程工具。

学习Python模块:封装语句、函数以及其他工具,从而可以组织成较大的组件。

Python的面向对象编程工具,用于组织程序代码。

学习异常处理模型,以及用于编写较大程序的开发工具。

了解包括装饰器、描述器、元类和Unicode处理等高级Python工具。

Python学习手册第4版对比以前的版本:

从以下3个方面做出了修改:

■ 覆盖了Python 3.0和Python 2.6,本书强调Python 3.0,但是对Python 2.6中的不同之处给出了提示。

■ 包含了一些新的章节,主要介绍高级的核心语言话题。

■ 重新组织了一些已有的材料,并且使用新的示例扩展它们以便更清楚。

我(作者Mark Lutz)在2009年撰写本书这一版时,Python分为两支――Python 3.0是新兴的版本并且不兼容地修改了该语言;Python 2.6保持与大量已有的Python代码向后兼容。尽管Python 3被视作是Python的未来,Python 2仍然使用广泛并且会在未来的几年内与Python 3并列地得到支持。尽管只是同一种语言的不同版本,但Python 3.0几乎无法运行为之前版本编写的代码(单单print从语句修改为函数,听上去更合理,但是,它几乎影响到所有已经编写好的Python程序)。

版本的划分使得程序员和图书作者都陷入了两难的境地。尽管编写一本好像Python 2不存在而只介绍Python 3的图书很容易,但这可能无法满足大量基于已有代码的Python用户的需求。大量已有代码都是针对Python 2编写的,并且它们不会很快过时。尽管现在的初学者更关注Python 3,但如果他们必须使用过去编写的代码,那么就必须熟悉Python 2。所有的第三方库和扩展都移植到Python 3可能还需要数年时间,所以Python 2这一分支可能不完全是临时性的。

覆盖Python 3.0和Python 2.6

为了解决这一分歧并且满足所有潜在读者的需求,《Python学习手册》第4版更新为覆盖Python 3.0和Python 2.6(以及Python 3.X和Python 2.X系列的后续发布)。本书针对使用Python 2编程的程序员、使用Python 3的程序员,以及介于这二者之间的程序员。

也就是说,你可以使用本书来学习任何的Python版本。尽管这里主要关注Python 3.0,但Python 2.6的不同之处和工具也都针对使用旧代码的程序员给出了提示。尽管这两个版本大部分是相同的,但它们还是在一些重要的方面有所不同,对此我将指出两者的区别。

例如,在大多数示例中,我们使用Python 3.0的print调用,但是,我也将介绍Python 2.6的print语句,以便使你能够理解较早的代码。我还广泛地介绍了新功能,例如Python 3.0中的nonlocal语句和Python 2.6以及Python 3.0中的字符串的format方法,当较早的Python中没有这样的扩展时,我将会指出来。

如果你初次学习Python并且不需要使用任何遗留代码,我鼓励你从Python 3.0开始,它清理了这一语言中长久以来的一些瑕疵,同时保留了所有最初的核心思想并且添加了一些漂亮的新工具。

当你阅读本书时,很多流行的Python库和工具可能也支持Python 3.0了,特别是在未来的Python 3.1版本中,可以预期文件I/O性能会有较大的提升。如果你使用基于Python 2.X的一个系统,将会发现本书解决了你所关心的问题,并且将帮助你在未来过渡到Python 3.0。

此外,本版也介绍了其他的Python 2和Python 3的发布版本,尽管一些旧的Python 2.X代码可能无法运行本书的所有示例。例如,尽管在Python 2.6和Python 3.0中都有类装饰器,但我们无法在还没有这一功能的旧Python 2.X中使用它。参见前言中的表0-1和表0-2,它们概括了Python 2.6和Python 3.0中的变化。

注意: 就在付梓前不久,本书中还添加了关于未来的Python 3.1版的一些突出的扩展的提示,如:字符串format方法调用中的逗号分隔符和自动字段编号、with语句中的多环境管理器语法、针对数字的新方法等。由于Python 3.1的主要目标是优化,本书也直接应用这一新发布。事实上,由于Python 3.1在Python 3.0后接踵而来,并且最新的Python通常是最好的可用Python,在本书中,术语"Python 3.0”通常指的是Python 3.0引入的但在整个Python 3.X版本中都将存在的语言变化。

新增章

尽管本版的主要目标是针对Python 3.0和Python 2.6更新之前的版本的示例和内容,但我们也增加了5章新内容,以介绍新的主题和增加的内容。

第27章是一个新的类教程,使用更加实际的示例来说明Python面向对象编程的基础知识。

第36章提供了关于Unicode和字节字符串的详细介绍,并且概括了Python 2.6和Python 3.0中字符串和文件的区别。

第37章介绍了特性这样的管理属性工具,并且对描述符给出了新的介绍。

第38章介绍了函数和类装饰器,并且给出了全面的示例。

第39章介绍了元类,并且将它们与描述符进行了比较和对比。

第27章针对Python中的类和OOP提供了一个渐进的、按部就班的教程。它基于我在近年所教授的培训课程中已经使用的一个现场展示,但是,为了在本书中使用已经对它进行了修改。该章设计来在比此前的示例更为实际的背景中展示OOP,并且说明类概念如何综合运用于较大的、实用的程序中。我期望它在这里与在实际的课程中一样有效。

后面新增的4章收录到了本书的最后一个新增部分中,即"高级话题”部分。尽管这些主题从技术上讲都属于核心语言,但不是每个Python程序员都需要深入了解Unicode文本或元类的细节。因此,这4章单独放到了新的部分中,并且正式地作为可选的阅读材料。例如,关于Unicode和二进制数据字符串的细节已经放入到了此部分中,因为大多数程序员使用简单的ASCII字符串,而不需要了解这些主题。类似地,装饰器和元类通常也只是API构建者才感兴趣的专门话题,而不是应用程序员所感兴趣的话题。

然而,如果你确实使用这些工具,或者使用代码来做这些工作,"高级话题”部分的章节应该能够帮助你掌握其基础知识。此外,这些章的示例包含了学习案例,这些案例把核心语言概念绑定到了一起,并且它们比本书其他部分的示例更充实。由于这个新的部分是可选阅读材料,所以该部分最后只有问答题但没有练习题。

Python学习手册第4版目录:

前言 1

第一部分 使用入门

第1章 问答环节 19

人们为何使用Python 19

软件质量 20

开发效率 21

Python是"脚本语言”吗 21

好吧,Python的缺点是什么呢 23

如今谁在使用Python 23

使用Python可以做些什么 24

系统编程 25

用户图形接口 25

Internet脚本 25

组件集成 26

数据库编程 26

快速原型 27

数值计算和科学计算编程 27

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

Python如何获得支持 28

Python有哪些技术上的优点 28

面向对象 28

免费 29

可移植 29

功能强大 30

可混合 31

简单易用 31

简单易学 32

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

本章小结 33

本章习题 33

习题解答 34

Python是工程,不是艺术 34

第2章 Python如何运行程序 36

Python解释器简介 36

程序执行 37

程序员的视角 37

Python的视角 39

执行模块的变体 41

Python实现的替代者 42

执行优化工具 43

冻结二进制文件 44

其他执行选项 45

未来的可能性 46

本章小结 46

本章习题 47

习题解答 47

第3章 如何运行程序 48

交互提示模式下编写代码 48

交互地运行代码 49

为什么使用交互提示模式 51

使用交互提示模式 52

系统命令行和文件 54

第一段脚本 55

使用命令行运行文件 56

使用命令行和文件 57

UNIX可执行脚本(#!) 58

UNIX env查找技巧 59

点击文件图标 60

在Windows中点击图标 60

input的技巧 61

图标点击的其他限制 63

模块导入和重载 63

模块的显要特性:属性 65

import和reload的使用注意事项 68

使用exec运行模块文件 69

IDLE用户界面 70

IDLE基础 71

使用IDLE 72

高级IDLE工具 74

其他的IDE 74

其他启动选项 76

嵌入式调用 76

冻结二进制的可执行性 77

文本编辑器启动的选择 77

其他的启动选择 77

未来的可能 77

我应该选用哪种 78

调试Python代码 78

本章小结 80

本章习题 80

习题解答 80

第一部分 练习题 81

第二部分 类型和运算

第4章 介绍Python对象类型 87

为什么使用内置类型 88

Python的核心数据类型 88

数字 90

字符串 92

序列的操作 92

不可变性 94

类型特定的方法 94

寻求帮助 96

编写字符串的其他方法 97

模式匹配 98

列表 98

序列操作 98

类型特定的操作 99

边界检查 100

嵌套 100

列表解析 101

字典 103

映射操作 103

重访嵌套 104

键的排序:for 循环 105

迭代和优化 107

不存在的键:if 测试 107

元组 109

为什么要用元组 109

文件 110

其他文件类工具 111

其他核心类型 111

如何破坏代码的灵活性 113

用户定义的类 114

剩余的内容 115

本章小结 115

本章习题 116

习题解答 116

第5章 数字 117

Python的数字类型 117

数字常量 118

内置数学工具和扩展 119

Python表达式操作符 120

在实际应用中的数字 125

变量和基本的表达式 125

数字显示的格式 126

比较:一般的和连续的 127

str和repr显示格式 128

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

整数精度 133

复数 133

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

位操作 136

其他的内置数学工具 137

其他数字类型 139

小数数字 139

分数类型 141

集合 145

布尔型 151

数字扩展 152

本章小结 153

本章习题 153

习题解答 153

第6章 动态类型简介 155

缺少类型声明语句的情况 155

变量、对象和引用 156

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

对象的垃圾收集 158

共享引用 159

共享引用和在原处修改 161

共享引用和相等 163

动态类型随处可见 164

本章小结 165

本章习题 165

习题解答 165

第7章 字符串 167

字符串常量 169

单双引号字符串是一样的 170

用转义序列代表特殊字节 171

raw字符串抑制转义 173

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

实际应用中的字符串 176

基本操作 176

索引和分片 177

为什么要在意:分片 181

字符串转换工具 181

修改字符串 184

字符串方法 185

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

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

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

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

字符串格式化表达式 192

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

基于字典的字符串格式化 196

字符串格式化调用方法 196

基础知识 197

添加键、属性和偏移量 198

添加具体格式化 198

与%格式化表达式比较 200

为什么用新的格式化方法 203

通常意义下的类型分类 206

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

可变类型能够在原处修改 207

本章小结 208

本章习题 208

习题解答 208

第8章 列表与字典 210

列表 210

实际应用中的列表 213

基本列表操作 213

列表迭代和解析 213

索引、分片和矩阵 214

原处修改列表 215

字典 220

实际应用中的字典 222

字典的基本操作 222

原处修改字典 223

其他字典方法 224

语言表 225

字典用法注意事项 226

为什么要在意字典接口 229

创建字典的其他方法 230

Python 3.0中的字典变化 231

本章小结 237

本章习题 237

习题解答 237

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

元组 239

实际应用中的元组 241

为什么有了列表还要元组 243

文件 243

打开文件 244

使用文件 245

实际应用中的文件 246

其他文件工具 252

重访类型分类 254

为什么要在意操作符重载 255

对象灵活性 255

引用 VS 拷贝 256

比较、相等性和真值 258

Python 3.0的字典比较 260

Python中真和假的含义 261

Python的类型层次 263

Type对象 263

Python中的其他类型 265

内置类型陷阱 265

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

重复能够增加层次深度 266

留意循环数据结构 266

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

本章小结 267

本章习题 268

习题解答 268

第二部分练习题 269

第三部分 语句和语法

第10章 Python语句简介 275

重访Python程序结构 275

Python的语句 276

两个if的故事 278

Python增加了什么 279

Python删除了什么 279

为什么使用缩进语法 281

几个特殊实例 283

简短实例:交互循环 285

一个简单的交互式循环 285

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

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

用try语句处理错误 289

嵌套代码三层 290

本章小结 290

本章习题 291

习题解答 291

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

赋值语句 292

赋值语句的形式 293

序列赋值 294

Python 3.0中的扩展序列解包 297

多目标赋值语句 301

增强赋值语句 302

变量命名规则 305

Python的废弃协议 306

表达式语句 308

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

打印操作 310

Python 3.0的print函数 311

Python 2.6 print语句 313

打印流重定向 315

版本独立的打印 318

为什么要注意print和stdout 319

本章小结 320

本章习题 321

习题解答 321

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

if语句 322

通用格式 322

基本例子 323

多路分支 323

Python语法规则 325

代码块分隔符 326

语句的分隔符 328

一些特殊情况 329

真值测试 330

if/else三元表达式 332

为什么要在意布尔值 334

本章小结 335

本章习题 335

习题解答 335

第13章 while和for循环 336

while循环 336

一般格式 336

例子 337

break、continue、pass和循环else 338

一般循环格式 338

pass 338

continue 340

break 340

循环else 341

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

for循环 343

一般格式 343

例子 344

为什么要在意"文件扫描” 349

编写循环的技巧 350

循环计数器:while和range 351

非完备遍历:range和分片 352

修改列表:range 353

并行遍历:zip和map 354

产生偏移和元素:enumerate 357

本章小结 358

本章习题 358

习题解答 359

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

迭代器:初探 360

文件迭代器 361

手动迭代:iter和next 363

其他内置类型迭代器 365

列表解析:初探 367

列表解析基础知识 368

在文件上使用列表解析 369

扩展的列表解析语法 370

其他迭代环境 371

Python 3.0中的新的可迭代对象 375

range迭代器 376

map、zip和filter迭代器 377

多个迭代器 VS单个迭代器 378

字典视图迭代器 379

其他迭代器主题 381

本章小结 381

本章习题 381

习题解答 382

第15章 文档 383

Python文档资源 383

#注释 384

dir函数 384

文档字符串:__doc__ 385

PyDoc:help函数 388

PyDoc:HTML报表 390

标准手册集 393

网络资源 394

已出版的书籍 394

常见编写代码的陷阱 395

本章小结 397

本章习题 397

习题解答 397

第三部分练习题 398

第四部分 函数

第16章 函数基础 403

为何使用函数 404

编写函数 405

def语句 406

def语句是实时执行的 407

第一个例子:定义和调用 408

定义 408

调用 408

Python中的多态 409

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

定义 410

调用 411

重访多态 411

本地变量 412

本章小结 413

本章习题 413

习题解答 413

第17章 作用域 415

Python作用域基础 415

作用域法则 416

变量名解析:LEGB原则 418

作用域实例 419

内置作用域 420

在Python 2.6中违反通用性 422

global语句 422

最小化全局变量 423

最小化文件间的修改 424

其他访问全局变量的方法 426

作用域和嵌套函数 427

嵌套作用域的细节 427

嵌套作用域举例 427

nonlocal语句 433

nonlocal基础 433

nonlocal应用 435

为什么使用nonlocal 437

本章小结 440

本章习题 441

习题解答 442

第18章 参数 444

传递参数 444

参数和共享引用 445

避免可变参数的修改 447

对参数输出进行模拟 448

特定的参数匹配模型 449

基础知识 449

匹配语法 450

细节 452

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

任意参数的实例 455

Python 3.0 Keyword-Only参数 459

min调用 462

满分 463

加分点 464

结论 465

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

模拟Python 3.0 print函数 466

使用Keyword-Only参数 467

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

本章小结 469

本章习题 470

习题解答 470

第19章 函数的高级话题 472

函数设计概念 472

递归函数 474

用递归求和 474

编码替代方案 475

循环语句VS递归 476

处理任意结构 477

函数对象:属性和注解 478

间接函数调用 478

函数内省 479

函数属性 480

Python 3.0中的函数注解 481

匿名函数: lambda 483

lambda表达式 483

为什么使用lambda 484

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

嵌套lambda和作用域 487

为什么要在意:回调 488

在序列中映射函数:map 489

函数式编程工具:filter和reduce 490

本章小结 492

本章习题 492

习题解答 492

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

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

列表解析与map 495

增加测试和嵌套循环 496

列表解析和矩阵 498

理解列表解析 499

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

重访迭代器:生成器 501

生成器函数:yield VS return 502

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

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

生成器是单迭代器对象 508

用迭代工具模拟zip和map 510

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

内置类型和类中的值生成 515

Python 3.0解析语法概括 516

解析集合和字典解析 517

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

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

对模块计时 519

计时脚本 519

计时结果 520

计时模块替代方案 523

其他建议 527

函数陷阱 528

本地变量是静态检测的 528

默认和可变对象 529

没有return语句的函数 531

嵌套作用域的循环变量 532

本章小结 532

本章习题 532

习题解答 533

第四部分练习题 533

第五部分 模块

第21章 模块:宏伟蓝图 539

为什么使用模块 540

Python程序架构 540

如何组织一个程序 541

导入和属性 541

标准库模块 543

import如何工作 543

1.搜索 544

2.编译(可选) 544

3.运行 545

模块搜索路径 545

配置搜索路径 547

搜索路径的变动 548

sys.path列表 548

模块文件选择 549

高级的模块选择概念 550

第三方工具:distutils 550

本章小结 551

本章习题 551

习题解答 551

第22章 模块代码编写基础 553

模块的创建 553

模块的使用 554

import语句 554

from语句 555

from *语句 555

导入只发生一次 555

import和from是赋值语句 556

文件间变量名的改变 557

import和from的对等性 557

from语句潜在的陷阱 558

模块命名空间 560

文件生成命名空间 560

属性名的点号运算 562

导入和作用域 562

命名空间的嵌套 563

重载模块 564

reload基础 565

reload实例 566

为什么要在意:模块重载 567

本章小结 568

本章习题 568

习题解答 568

第23章 模块包 570

包导入基础 570

包和搜索路径设置 571

__init__.py包文件 572

包导入实例 573

包对应的from语句和import语句 574

为什么要使用包导入 575

三个系统的传说 576

包相对导入 578

Python 3.0中的变化 578

相对导入基础知识 579

为什么使用相对导入 581

相对导入的作用域 583

模块查找规则总结 583

相对导入的应用 584

为什么要在意:模块包 589

本章小结 590

本章习题 590

习题解答 590

第24章 高级模块话题 592

在模块中隐藏数据 592

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

启用以后的语言特性 593

混合用法模式:__name__和__main__ 594

以__name__进行单元测试 595

使用带有__name__的命令行参数 596

修改模块搜索路径 599

Import语句和from语句的as扩展 599

模块是对象:元程序 600

用名称字符串导入模块 603

过渡性模块重载 604

模块设计理念 607

模块陷阱 607

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

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

from *会让变量语义模糊 610

reload不会影响from导入 610

reload、from以及交互模式测试 611

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

本章小结 613

本章习题 613

习题解答 613

第五部分练习题 614

第六部分 类和OOP

第25章 OOP:宏伟蓝图 619

为何使用类 620

概览OOP 621

属性继承搜索 621

类和实例 623

类方法调用 624

编写类树 624

OOP是为了代码重用 627

本章小结 629

本章习题 629

习题解答 630

第26章 类代码编写基础 631

类产生多个实例对象 631

类对象提供默认行为 632

实例对象是具体的元素 632

第一个例子 632

类通过继承进行定制 635

第二个例子 635

类是模块内的属性 637

类可以截获Python运算符 638

第三个例子 639

为什么要使用运算符重载 641

世界上最简单的Python类 641

类与字典的关系 644

本章小结 646

本章习题 646

习题解答 646

第27章 更多实例 649

步骤1:创建实例 650

编写构造函数 650

在进行中测试 651

以两种方式使用代码 652

版本差异提示 654

步骤2:添加行为方法 654

编写方法 656

步骤3:运算符重载 658

提供打印显示 658

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

编写子类 660

扩展方法:不好的方式 660

扩展方法:好的方式 661

多态的作用 663

继承、定制和扩展 664

OOP:大思路 664

步骤5:定制构造函数 665

OOP比我们认为的要简单 666

组合类的其他方式 667

在Python 3.0中捕获内置属性 669

步骤6:使用内省工具 670

特殊类属性 670

一种通用显示工具 671

实例与类属性的关系 672

工具类的命名考虑 673

类的最终形式 674

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

Pickle和Shelve 676

在shelve数据库中存储对象 677

交互地探索shelve 678

更新shelve中的对象 680

未来方向 681

本章小结 683

本章习题 684

习题解答 684

第28章 类代码编写细节 686

class语句 686

一般形式 686

例子 687

方法 689

例子 690

调用超类构造函数 691

其他方法调用的可能性 691

继承 692

属性树的构造 692

继承方法的专有化 693

类接口技术 694

抽象超类 695

Python 2.6和Python 3.0的抽象超类 696

命名空间:完整的内容 698

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

属性名称:对象命名空间 698

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

命名空间字典 701

命名空间链接 704

回顾文档字符串 706

类与模块的关系 707

本章小结 708

本章习题 708

习题解答 708

第29章 运算符重载 710

基础知识 710

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

常见的运算符重载方法 711

索引和分片:__getitem__和__setitem__ 713

拦截分片 713

Python 2.6中的分片和索引 715

索引迭代:__getitem__ 716

迭代器对象:__iter__和__next__ 717

用户定义的迭代器 717

有多个迭代器的对象 719

成员关系:__contains__、__iter__和__getitem__ 721

属性引用:__getattr__和__setattr__ 723

其他属性管理工具 725

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

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

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

原处加法 730

Call表达式:__call__ 731

函数接口和回调代码 732

比较:__lt__、__gt__和其他方法 734

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

布尔测试:__bool__和__len__ 735

Python 2.6中的布尔 736

对象析构函数:__del__ 738

本章小结 739

本章习题 739

习题解答 739

第30章 类的设计 741

Python和OOP 741

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

OOP和继承:"是一个”关系 743

OOP和组合:"有一个”关系 744

重访流处理器 746

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

OOP和委托:"包装”对象 749

类的伪私有属性 751

变量名压缩概览 751

为什么使用伪私有属性 752

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

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

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

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

多重继承:"混合”类 760

编写混合显示类 761

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

为什么有工厂 772

与设计相关的其他话题 773

本章小结 773

本章习题 774

习题解答 774

第31章 类的高级主题 775

扩展内置类型 775

通过嵌入扩展类型 776

通过子类扩展类型 777

新式类 779

新式类变化 780

类型模式变化 781

钻石继承变动 785

新式类的扩展 789

slots实例 789

类特性 793

__getattribute__和描述符 795

元类 795

静态方法和类方法 796

为什么使用特殊方法 796

Python 2.6和Python 3.0中的静态方法 797

静态方法替代方案 799

使用静态和类方法 800

使用静态方法统计实例 801

用类方法统计实例 802

装饰器和元类:第一部分 805

函数装饰器基础 805

装饰器例子 806

类装饰器和元类 807

更多详细信息 808

类陷阱 809

修改类属性的副作用 809

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

多重继承:顺序很重要 811

类、方法以及嵌套作用域 812

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

"过度包装” 814

本章小结 815

本章习题 815

习题解答 815

第六部分练习题 816

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

第七部分 异常和工具

第32章 异常基础 825

为什么使用异常 826

异常的角色 826

异常处理:简明扼要 827

默认异常处理器 827

捕获异常 828

引发异常 829

用户定义的异常 830

终止行为 830

为什么要在意:错误检查 832

本章小结 833

本章习题 833

习题解答 834

第33章 异常编码细节 835

try/except/else语句 835

try语句分句 836

try/else分句 839

例子:默认行为 840

例子:捕捉内置异常 841

try/finally语句 841

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

统一try/except/finally语句 843

统一try语句语法 845

通过嵌套合并finally和except 845

合并try的例子 846

raise语句 847

利用raise传递异常 849

Python 3.0异常链:raise from 849

assert语句 850

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

with/as环境管理器 851

基本使用 852

环境管理协议 853

本章小结 855

本章习题 855

习题解答 856

第34章 异常对象 857

异常:回到未来 858

字符串异常很简单 858

基于类的异常 858

类异常例子 859

为什么使用类异常 861

内置Exception类 864

内置异常分类 865

默认打印和状态 866

定制打印显示 867

定制数据和行为 868

提供异常细节 868

提供异常方法 869

本章小结 870

本章习题 870

习题解答 870

第35章 异常的设计 872

嵌套异常处理器 872

例子:控制流程嵌套 873

例子:语法嵌套化 874

异常的习惯用法 876

异常不总是错误 876

函数信号条件和raise 876

关闭文件和服务器连接 877

在try外进行调试 878

运行进程中的测试 879

关于sys.exc_info 879

与异常有关的技巧 880

应该包装什么 881

捕捉太多:避免空except语句 881

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

核心语言总结 884

Python工具集 884

大型项目的开发工具 885

本章小结 888

第七部分练习题 889

第八部分 高级话题注1

第36章 Unicode和字节字符串 893

Python 3.0中的字符串修改 894

字符串基础知识 895

字符编码方法 895

Python的字符串类型 897

文本和二进制文件 899

Python 3.0中的字符串应用 900

常量和基本属性 900

转换 901

编码Unicode字符串 903

编码ASCII文本 903

编码非ASCII文本 904

编码和解码非ASCII文本 904

其他Unicode编码技术 905

转换编码 907

在Python 2.6中编码Unicode字符串 908

源文件字符集编码声明 910

使用Python 3.0 Bytes对象 911

方法调用 912

序列操作 913

创建bytes对象的其他方式 913

混合字符串类型 914

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

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

文本文件基础 919

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

类型和内容错误匹配 921

使用Unicode文件 922

在Python 3.0中读取和写入Unicode 922

在Python 3.0中处理BOM 924

Python 2.6中的Unicode文件 927

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

re模式匹配模块 927

Struct二进制数据模块 928

pickle对象序列化模块 931

XML解析工具 932

本章小结 935

本章习题 935

习题解答 936

第37章 管理属性 938

为什么管理属性 938

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

特性 940

基础知识 940

第一个例子 941

计算的属性 942

使用装饰器编写特性 943

描述符 944

基础知识 945

第一个示例 947

计算的属性 949

在描述符中使用状态信息 950

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

__getattr__和__getattribute__ 953

基础知识 954

第一个示例 956

计算属性 958

__getattr__和__getattribute__比较 959

管理技术比较 960

拦截内置操作属性 963

重访基于委托的Manager 967

示例:属性验证 970

使用特性来验证 971

使用描述符验证 973

使用__getattr__来验证 974

使用__getattribute__验证 976

本章小结 977

本章习题 977

习题解答 977

第38章 装饰器 979

什么是装饰器 979

管理调用和实例 980

管理函数和类 980

使用和定义装饰器 981

为什么使用装饰器 981

基础知识 982

函数装饰器 982

类装饰器 986

装饰器嵌套 988

装饰器参数 990

装饰器管理函数和类 991

编写函数装饰器 991

跟踪调用 992

状态信息保持选项 993

类错误之一:装饰类方法 997

计时调用 1002

添加装饰器参数 1004

编写类装饰器 1007

单体类 1007

跟踪对象接口 1009

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

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

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

直接管理函数和类 1016

示例:"私有”和"公有”属性 1018

实现私有属性 1019

实现细节之一 1021

公有声明的泛化 1022

实现细节之二 1024

开放问题 1025

Python不是关于控制 1029

示例:验证函数参数 1030

目标 1030

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

针对关键字和默认泛化 1033

实现细节 1036

开放问题 1038

装饰器参数 VS 函数注解 1039

其他应用程序:类型测试 1041

本章小结 1042

本章习题 1042

习题解答 1043

第39章 元类 1046

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

提高魔力层次 1047

"辅助”函数的缺点 1049

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

元类模型 1053

类是类型的实例 1053

元类是Type的子类 1055

Class语句协议 1056

声明元类 1057

编写元类 1058

基本元类 1058

定制构建和初始化 1059

其他元类编程技巧 1060

实例与继承的关系 1063

示例:向类添加方法 1064

手动扩展 1064

基于元类的扩展 1065

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

示例:对方法应用装饰器 1070

用装饰器手动跟踪 1070

用元类和装饰器跟踪 1071

把任何装饰器应用于方法 1073

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

"可选的”语言功能 1076

本章小结 1078

本章习题 1078

习题解答 1078

第九部分 附录注2

附录A 安装和配置 1083

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

你可能感兴趣的:(python学习手册-Python学习手册)