如果你在计算机上做大量的工作,你一定非常希望它们能够自动化一些。例如,你想在大量的文件中进行查找替换,或者对大量的照片以一种复杂的方式进行命名和排序。也许你还希望写一个小型自定义的数据库,或者一个专业的 CUI 程序,或者是一个简单的游戏。如果你是一个专业的软件开发人员,你可能在处理一些 C/C++/Java 库时会发现通常的编写/编译/测试/重编译周期太慢了。
Python 是一门简单易学且功能强大的编程语言。它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程。Python 优雅的语法和动态类型,再结合它的解释性,使其在大多数平台的许多领域成为编写脚本或开发应用程序的理想语言。本手册向读者介绍了 Python 语言及其体系相关的基本知识与概念。通过示例让读者能够更加深入的了解 Python 语言的特点。
本章着眼于从 Python 访问 C 代码的问题。许多 Python 内置库是用 C 写的, 访问 C 是让 Python 的对现有库进行交互一个重要的组成部分。 这也是一个当你面临从 Python 2 到 Python 3 扩展代码的问题。 虽然 Python 提供了一个广泛的编程 API,实际上有很多方法来处理 C 的代码。
试验还是很棒的,但是调试?就没那么有趣了。事实是,在 Python 测试代码之前没有编译器来分析你的代码,因此使的测试成为开发的一个重要部分。本章的目标是讨论一些关于测试、调试和异常处理的常见问题。但是并不是为测试驱动开发或者单元测试模块做一个简要的介绍。因此,笔者假定读者熟悉测试概念。测试 stdout 输出问题你的程序中有个方法会输出到标准输出中(sys.
许多人使用 Python 作为一个 shell 脚本的替代,用来实现常用系统任务的自动化,如文件的操作,系统的配置等。本章的主要目标是描述光宇编写脚本时候经常遇到的一些功能。例如,解析命令行选项、获取有用的系统配置数据等等。第5章也包含了与文件和目录相关的一般信息。通过重定向/管道/文件接受输入问题你希望你的脚本接受任何用户认为最简单的输入方式。
对于并发编程, Python 有多种长期支持的方法, 包括多线程, 调用子进程, 以及各种各样的关于生成器函数的技巧. 这一章将会给出并发编程各种方面的技巧, 包括通用的多线程技术以及并行计算的实现方法.像经验丰富的程序员所知道的那样, 大家担心并发的程序有潜在的危险. 因此, 本章的主要目标之一是给出更加可信赖和易调试的代码.
本章是关于在网络应用和分布式应用中使用的各种主题。主题划分为使用 Python 编写客户端程序来访问已有的服务,以及使用 Python 实现网络服务端程序。也给出了一些常见的技术,用于编写涉及协同或通信的的代码。作为客户端与 HTTP 服务交互问题你需要通过 HTTP 协议以客户端的方式访问多种服务。例如,下载数据或者与基于 REST 的 API 进行交互。
模块与包是任何大型程序的核心,就连 Python 安装程序本身也是一个包。本章重点涉及有关模块和包的常用编程技术,例如如何组织包、把大型模块分割成多个文件、创建命名空间包。同时,也给出了让你自定义导入语句的秘籍。构建一个模块的层级包问题你想将你的代码组织成由很多分层模块构成的包。解决方案封装成包是很简单的。
软件开发领域中最经典的口头禅就是“don’t repeat yourself”。 也就是说,任何时候当你的程序中存在高度重复(或者是通过剪切复制)的代码时,都应该想想是否有更好的解决方案。 在 Python 当中,通常都可以通过元编程来解决这类问题。 简而言之,元编程就是关于创建操作源代码(比如修改、生成或包装原来的代码)的函数和类。 主要技术是使用装饰器、类装饰器和元类。
本章主要关注点的是和类定义有关的常见编程模型。包括让对象支持常见的 Python 特性、特殊方法的使用、 类封装技术、继承、内存管理以及有用的设计模式。改变对象的字符串显示问题你想改变对象实例的打印或显示输出,让它们更具可读性。解决方案要改变一个实例的字符串表示,可重新定义它的 __str__()和 __repr__() 方法。
使用 def语句定义函数是所有程序的基础。 本章的目标是讲解一些更加高级和不常见的函数定义与使用模式。 涉及到的内容包括默认参数、任意数量参数、强制关键字参数、注解和闭包。 另外,一些高级的控制流和利用回调函数传递数据的技术在这里也会讲解到。可接受任意数量参数的函数问题你想构造一个可接受任意数量参数的函数。
这一章主要讨论使用 Python 处理各种不同方式编码的数据,比如 CSV 文件,JSON,XML 和二进制包装记录。 和数据结构那一章不同的是,这章不会讨论特殊的算法问题,而是关注于怎样获取和存储这些格式的数据。读写 CSV 数据问题你想读写一个 CSV 格式的文件。解决方案对于大多数的 CSV 格式的数据读写问题,都可以使用 csv 库。 例如:假设你在一个名叫 stocks.
所有程序都要处理输入和输出。 这一章将涵盖处理不同类型的文件,包括文本和二进制文件,文件编码和其他相关的内容。 对文件名和目录的操作也会涉及到。读写文本数据问题你需要读写各种不同编码的文本数据,比如 ASCII,UTF-8 或 UTF-16 编码等。解决方案使用带有 rt 模式的 open()函数读取文本文件。
迭代是 Python 最强大的功能之一。初看起来,你可能会简单的认为迭代只不过是处理序列中元素的一种方法。 然而,绝非仅仅就是如此,还有很多你可能不知道的, 比如创建你自己的迭代器对象,在 itertools 模块中使用有用的迭代模式,构造生成器函数等等。 这一章目的就是向你展示跟迭代有关的各种常见问题。
在 Python 中执行整数和浮点数的数学运算时很简单的。 尽管如此,如果你需要执行分数、数组或者是日期和时间的运算的话,就得做更多的工作了。 本章集中讨论的就是这些主题。数字的四舍五入问题你想对浮点数执行指定精度的舍入运算。解决方案对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可。比如:>>> round(1.23, 1)1.2>>>
几乎所有有用的程序都会涉及到某些文本处理,不管是解析数据还是产生输出。 这一章将重点关注文本的操作处理,比如提取字符串,搜索,替换以及解析等。 大部分的问题都能简单的调用字符串的内建方法完成。 但是,一些更为复杂的操作可能需要正则表达式或者强大的解析器,所有这些主题我们都会详细讲解。 并且在操作 Unicode 时候碰到的一些棘手的问题在这里也会被提及到。
Python 提供了大量的内置数据结构,包括列表,集合以及字典。大多数情况下使用这些数据结构是很简单的。但是,我们也会经常碰到到诸如查询,排序和过滤等等这些普遍存在的问题。因此,这一章的目的就是讨论这些比较常见的问题和算法。另外,我们也会给出在集合模块 collections 当中操作这些数据结构的方法。
译者的话人生苦短,我用 Python!译者一直坚持使用 Python3,因为它代表了 Python 的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且 Python3 的未来需要每个人的帮助和支持。 目前市面上的教程书籍,网上的手册大部分基本都是 2.x 系列的,专门基于 3.x 系列的书籍少的可怜。
本章你看了一些上一章的⼀些简单的嵌入式示例进行了扩展, 你已经可以将php放入 到各种非线程应用了. 现在你已经掌握了扩展和嵌入式的基础, 并且可以在zval, 类, 资源, HashTable上工作了, 你已经可以真正开始⼀个真正的项目了.在剩下的附录中, 你将看到php, zend以及其他扩展暴露的很多API函数.
在你的应用中运行php代码固然不错, 但是此刻, php执行环境仍然和你的主应用是隔离的, 它们并没有在真正意义上的一个层级进行交互.现在你应该对php扩展的开发以及构建启用方面比较熟悉了. 你也已经有完成了嵌入 工作的例程, 这样就省去了这份工作. 将扩展代码植入到嵌入式应用中的工作量要比标准扩展小. 下面是⼀个新的嵌入式项目:#include <sapi/embed/php_embed.h>
关注时代Java