目录
上册

前言 1

第一部分 使用入门

第1章 问答环节 21

人们为何使用Python 21

软件质量 22

开发者效率23

Python是一门“脚本语言”吗 23

好吧,Python的缺点是什么 25

如今谁在使用Python 25

其他的Python设计权衡:一些难以把握的方面 26

使用Python可以做些什么 28

系统编程 28

图形用户界面(GUI) 29

Internet脚本 29

组件集成 30

数据库编程30

快速原型 31

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

更多内容:游戏、图像、数据挖掘、机器人、Excel等 31

Python如何开发并获得支持 32

开源的权衡33

Python有哪些技术上的优点 33

面向对象和函数式 33

免费 34

可移植 34

功能强大 35

可混合 36

相对简单易用 36

相对简单易学 37

以Monty Python命名 37

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

本章小结 39

本章习题 39

习题解答 40

Python是工程,不是艺术 41

第2章 Python如何运行程序 43

Python解释器简介 43

程序执行 45

程序员的视角 45

Python的视角 46

执行模型的变体 48

Python的各种实现 49

执行优化工具 52

冻结二进制文件 53

未来的可能性 54

本章小结 55

本章习题 55

习题解答 56

第3章 你应如何运行程序 57

交互式命令行模式 57

开始一个交互式会话 57

Windows平台上的交互式命令行在哪里 59

系统路径 59

Python 33中的新Windows选项:PATH和启动器 60

运行的位置:代码目录 61

不需要输入的内容:提示符和注释 62

交互式地运行代码 63

为什么要使用交互式命令行模式 64

使用注意:交互命令行模式 65

系统命令行和文件 67

第一段脚本68

使用命令行运行文件 69

不同的命令行使用方式 70

使用注意:命令行和文件 71

UNIX风格可执行脚本:#! 72

UNIX脚本基础 72

UNIX env查找技巧 73

Python 33 Windows启动器:Windows也有#!了 73

点击文件图标 75

图标点击基础知识 75

在Windows上点击图标 76

Windows上输入的技巧 77

其他图标点击的限制 79

模块导入和重载 79

导入和重载基础知识 80

模块的宏观视角:属性 82

使用注意:import和reload 85

使用exec运行模块文件 85

IDLE用户界面 86

IDLE启动细节 87

IDLE基础用法 88

IDLE功能特性 89

高级IDLE工具 90

使用注意:IDLE 90

其他IDE 92

其他启动选项 93

嵌入式调用93

冻结二进制可执行文件 94

文本编辑器启动方式 94

其他的启动方式 95

未来的可能95

应该选用哪种方式 95

调试Python代码 96

本章小结 97

本章习题 97

习题解答 98

第一部分练习题 99

第二部分 类型和运算

第4章 介绍Python对象类型 105

Python知识结构 105

为什么要使用内置类型 106

Python核心数据类型 107

数字 108

字符串 110

序列操作 110

不可变性 112

特定类型的方法 113

寻求帮助 115

字符串编程的其他方式 116

Unicode字符串 117

模式匹配 119

列表 120

序列操作 120

特定的操作121

边界检查 121

嵌套 122

推导 122

字典 125

映射操作 125

重访嵌套 126

不存在的键:if 测试 128

键的排序:for 循环 129

迭代和优化131

元组 132

为什么要使用元组 133

文件 133

二进制字节文件 134

Unicode文本文件 135

其他类文件工具 137

其他核心类型 137

如何破坏代码的灵活性 139

用户定义的类 140

剩余的内容141

本章小结 141

本章习题 141

习题解答 142

第5章 数值类型 143

数值类型基础知识 143

数值字面量144

内置数值工具 146

Python表达式运算符 146

数字的实际应用 151

变量与基础表达式 151

数值的显示格式 153

str和repr显示格式 154

普通比较与链式比较 154

除法:经典除法、向下取整除法和真除法 156

整数精度 160

复数 160

十六进制、八进制和二进制:字面量与转换 161

按位操作 163

其他内置数值工具 164

其他数值类型 167

小数类型 167

分数类型 169

集合 173

布尔型 180

数值扩展 181

本章小结 182

本章习题 182

习题解答 182

第6章 动态类型 184

缺少声明语句的情况 184

变量、对象和引用 184

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

对象的垃圾收集 187

关于Python垃圾回收的更多讨论 188

共享引用 189

共享引用和在原位置修改 190

共享引用和相等 192

动态类型随处可见 193

“弱”引用194

本章小结 194

本章习题 194

习题解答 195

第7章 字符串基础 196

本章范围 196

Unicode简介 197

字符串基础 197

字符串字面量 199

单引号和双引号字符串是一样的 200

转义序列代表特殊字符 200

原始字符串阻止转义 203

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

实际应用中的字符串 206

基本操作 206

索引和分片207

请留意:分片 211

字符串转换工具 212

修改字符串I 214

字符串方法 216

方法调用语法 216

字符串的方法 217

字符串方法示例:修改字符串II 218

字符串方法示例:解析文本 220

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

原始string模块的函数(在Python 3X中删除) 221

字符串格式化表达式 223

格式化表达式基础 224

高级格式化表达式语法 225

高级格式化表达式举例 226

基于字典的格式化表达式 227

字符串格式化方法调用 228

字符串格式化方法基础 228

添加键、属性和偏移量 229

高级格式化方法语法 230

高级格式化方法举例 231

与%格式化表达式比较233

为什么使用格式化方法 236

通用类型分类 241

同一分类中的类型共享同一个操作集241

可变类型能够在原位置修改 242

本章小结 242

本章习题 243

习题解答 243

第8章 列表与字典 245

列表 245

列表的实际应用 248

基本列表操作 248

列表迭代和推导 248

索引、分片和矩阵 249

原位置修改列表 250

字典 256

字典的实际应用 258

字典的基本操作 258

原位置修改字典 259

其他字典方法 260

示例:电影数据库 262

字典用法注意事项 263

创建字典的其他方式 267

请留意:字典vs列表 268

Python 3X和27中的字典变化 269

请留意:字典接口 276

本章小结 277

本章习题 277

习题解答 277

第9章 元组、文件与其他核心类型 279

元组 280

元组的实际应用 281

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

重访记录:有名元组 284

文件 286

打开文件 287

使用文件 288

文件的实际应用 289

文本和二进制文件:一个简要的故事290

在文件中存储Python对象:转换 291

存储Python原生对象:pickle 293

用JSON格式存储Python对象 294

存储打包二进制数据:struct 296

文件上下文管理器 297

其他文件工具 297

核心类型复习与总结 299

请留意:运算符重载 300

对象灵活性300

引用vs复制 301

比较、等价性和真值 303

Python中True和False的含义 307

Python的类型层次 309

类型的对象309

Python中的其他类型 311

内置类型陷阱 311

赋值创建引用,而不是复制 311

重复会增加层次深度 312

注意循环数据结构 313

不可变类型不可以在原位置改变 313

本章小结 314

本章习题 314

习题解答 315

第二部分练习题 315

第三部分 语句和语法

第10章 Python语句简介 321

重温Python的知识结构 321

Python的语句 322

两种不同的if 324

Python增加的元素 325

Python删除的元素 325

为什么采用缩进语法 327

几种特殊情况 329

简短示例:交互式循环 331

一个简单的交互式循环 331

对用户输入做数学运算 333

通过测试输入数据来处理错误 334

用try语句处理错误 335

嵌套三层深的代码 337

本章小结 338

本章习题 338

习题解答 338

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

赋值语句 340

赋值语句形式 341

序列赋值 342

Python 3X中的扩展序列解包 345

多目标赋值349

增量赋值 350

变量命名规则 353

Python中的废弃协议 355

表达式语句 356

表达式语句和原位置修改 358

打印操作 358

Python 3X的print函数 359

Python 2X的print语句 362

打印流重定向 363

版本中立的打印 367

为什么你要注意:print和stdout 369

本章小结 370

本章习题 370

习题解答 370

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

if语句372

一般形式 372

基础示例 373

多路分支 373

复习Python语法规则 375

代码块分隔符:缩进规则 377

语句分隔符:行与行间连接符 378

一些特殊情况 379

真值和布尔测试 381

if/else三元表达式 383

请留意:布尔值 384

本章小结 386

本章习题 386

习题解答 386

第13章 while循环和for循环 387

while循环 387

一般形式 387

示例 388

break、continue、pass和循环的else 389

一般循环形式 389

pass 389

continue 391

break 391

循环的else 392

请留意:仿真C 语言的while循环 393

for循环 394

一般形式 394

示例 395

请留意:文件扫描器 400

编写循环的技巧 402

计数器循环:range 402

序列扫描:while和range vs for 403

序列乱序器:range和len 404

非穷尽遍历:range vs分片 405

修改列表:range vs推导 406

并行遍历:zip和map 407

同时给出偏移量和元素:enumerate 410

请留意:shell命令及其他 411

本章小结 414

本章习题 414

习题解答 414

第14章 迭代和推导 416

迭代器:初次探索 417

迭代协议:文件迭代器 417

手动迭代:iter和next 420

其他内置类型可迭代对象 423

列表推导:初次深入探索 425

列表推导基础 426

在文件上使用列表推导 427

扩展的列表推导语法 428

其他迭代上下文 430

Python 3X新增的可迭代对象 435

对Python 2X版本代码的影响:利与弊 435

range可迭代对象 436

map、zip和filter可迭代对象 437

多遍迭代器vs单遍迭代器 439

字典视图可迭代对象 440

其他迭代话题 441

本章小结 442

本章习题 442

习题解答 442

第15章 文档 444

Python文档资源 444

#注释 445

dir函数 445

文档字符串:__doc__ 447

PyDoc:help函数 450

PyDoc:HTML报告 453

改变PyDoc的颜色 456

超越文档字符串:Sphinx 461

标准手册集462

网络资源 463

已出版的书籍 463

常见代码编写陷阱 463

本章小结 465

本章习题 466

习题解答 466

第三部分练习题 467

第四部分 函数和生成器

第16章 函数基础 473

为何使用函数 474

编写函数 475

def语句 476

def语句执行于运行时 477

第一个示例:定义和调用 478

定义 478

调用 478

Python中的多态 479

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

定义 480

调用 481

重访多态 482

局部变量 482

本章小结 483

本章习题 483

习题解答 483

第17章 作用域 485

Python作用域基础 485

作用域细节486

变量名解析:LEGB规则 488

作用域实例490

内置作用域491

打破Python 2X的小宇宙 494

global语句 494

程序设计:最少化全局变量 495

程序设计:最小化跨文件的修改 497

其他访问全局变量的方式 498

作用域和嵌套函数 499

嵌套作用域的细节 500

嵌套作用域举例 500

工厂函数:闭包 501

使用默认值参数来保存外层作用域的状态 503

Python 3X中的nonlocal语句 507

nonlocal基础 508

nonlocal应用 509

为什么选nonlocal?状态保持备选项 511

nonlocal变量的状态:仅适用于Python 3X 511

全局变量的状态:只有一份副本 512

类的状态:显式属性(预习) 513

函数属性的状态:Python 3X和Python 2X的异同 514

请留意:定制open 516

本章小结 518

本章习题 518

习题解答 520

第18章 参数 521

参数传递基础 521

参数和共享引用 522

避免修改可变参数 524

模拟输出参数和多重结果 525

特殊的参数匹配模式 526

参数匹配基础 526

参数匹配语法 527

更深入的细节 528

关键字参数和默认值参数的示例 529

可变长参数的实例 532

Python 3X的keyword-only参数 536

min提神小例 539

满分 540

附加分 541

结论 542

通用set函数 542

模拟Python 3X print函数 544

使用keyword-only参数 546

请留意:关键字参数 547

本章小结 548

本章习题 548

习题解答 549

第19章 函数的高级话题 550

函数设计概念 550

递归函数 552

用递归求和552

编码替代方案 553

循环语句vs递归 554

处理任意结构 555

函数对象:属性和注解 558

间接函数调用:“一等”对象 559

函数自省 560

函数属性 561

Python 3X中的函数注解 562

匿名函数:lambda564

lambda表达式基础 564

为什么使用lambda 566

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

作用域:lambda也能嵌套 569

请留意:lambda回调 570

函数式编程工具 570

在可迭代对象上映射函数:map 571

选择可迭代对象中的元素:filter 573

合并可迭代对象中的元素:reduce 573

本章小结 575

本章习题 575

习题解答 575

第20章 推导和生成 577

列表推导与函数式编程工具 577

列表推导与map 578

使用filter增加测试和循环嵌套 579

示例:列表推导与矩阵 582

不要滥用列表推导:简单胜于复杂(KISS) 584

请留意:列表推导和map 585

生成器函数与表达式 587

生成器函数:yield vs return 587

生成器表达式:当可迭代对象遇见推导语法 592

生成器函数vs生成器表达式 597

生成器是单遍迭代对象 599

Python 33的yield from扩展 600

内置类型、工具和类中的值生成 601

实例:生成乱序序列 604

不要过度使用生成器:明确胜于隐晦(EIBTI) 609

示例:用迭代工具模拟zip和map 611

为什么你要注意:单遍迭代 616

推导语法总结 617

作用域及推导变量 617

理解集合推导和字典推导 619

集合与字典的扩展推导语法 620

本章小结 621

本章习题 621

习题解答 621

第21章 基准测试 623

计时迭代可选方案 623

自己编写的计时模块 624

33版本中新的计时器调用 627

计时脚本 628

计时结果 630

计时模块可选方案 633

其他建议 636

用timeit为迭代和各种Python计时 637

timeit基础用法 637

基准测试模块和脚本:timeit 641

基准测试脚本结果 643

基准测试的更多乐趣 646

其他基准测试主题:pystones 650

函数陷阱 651

局部变量是被静态检测的 651

默认值参数和可变对象 653

没有return语句的函数 655

其他函数陷阱 655

本章小结 656

本章习题 656

习题解答 656

第四部分练习题 657

第五部分 模块和包

第22章 模块:宏伟蓝图 663

为什么使用模块 664

Python程序架构 664

如何组织一个程序 665

导入和属性665

标准库模块667

import如何工作 667

1搜索 668

2编译(可选) 668

3运行 669

字节码文件:Python 32及以上版本的__pycache__ 670

实际应用中的字节码文件模型 671

模块搜索路径 672

配置搜索路径 674

搜索路径的变化 674

syspath列表 675

模块文件选择 676

第三方工具:distutils 678

本章小结 678

本章习题 679

习题解答 679

第23章 模块代码编写基础 680

模块的创建 680

模块文件名680

其他种类的模块 681

模块的使用 681

import语句 681

from语句 682

from *语句 682

导入只发生一次 683

import和from是赋值语句 684

import和from的等价性 685

from语句潜在的陷阱 686

模块命名空间 687

文件产生命名空间 687

命名空间字典:__dict__ 689

属性名称的点号运算 689

导入与作用域 690

命名空间的嵌套 691

重新加载模块 692

reload基础 693

reload示例 694

请留意:模块重新加载 695

本章小结 696

本章习题 696

习题解答 696

第24章 模块包 698

包导入基础 698

包和搜索路径设置 699

__init__py包文件 700

包导入示例 702

包的from语句与包的import语句 703

为什么要使用包导入 704

三个系统的故事 705

请留意:模块包 707

包相对导入 708

Python 3X中的变化 708

相对导入基础知识 709

为什么使用相对导入 710

相对导入的适用情况 713

模块查找规则总结 713

相对导入的实际应用 714

包相对导入的陷阱:混合使用 719

Python 33中的命名空间包 724

命名空间包的语义 725

对常规包的影响:可选的__init__py 726

命名空间包的实际应用 727

命名空间包嵌套 729

文件仍然优先于路径 730

本章小结 732

本章习题 732

习题解答 733

第25章 高级模块话题 734

模块设计概念 734

模块中的数据隐藏 736

使 * 的破坏最小化:_X和__all__ 736

启用未来语言特性:__future__ 737

混合使用模式:__name__和__main__ 738

以__name__进行单元测试 739

示例:双模式代码 740

货币符号:Unicode的应用 743

文档字符串:模块文档的应用 745

修改模块搜索路径 746

import语句和from语句的as扩展 747

示例:模块即是对象 748

用名称字符串导入模块 750

运行代码字符串 751

直接调用:两种方式 751

示例:传递性模块重载译注1 752

递归重载器752

另外的代码756

模块陷阱 759

模块名称冲突:包和包相对导入 760

顶层代码中语句次序很重要 760

from复制名称,而不是链接 761

from *会让变量含义模糊化 762

reload不能作用于from导入 762

reload、from以及交互式测试 763

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

本章小结 765

本章习题 766

习题解答 766

第五部分练习题 766



按 Ctrl+p 打印本页】【关闭