0
点赞
收藏
分享

微信扫一扫

Stackless Python

青乌 03-18 22:15 阅读 2

最基本的就是 Python 的__future__模块。它将 Python 新版本中的一些功能反向迁移 到旧版本中,采用的是导入语句的形式:

from __future__ import <feature>

future 语句提供的功能是和语法相关的元素,其他方法很难处理这些元素。这个语句只 能影响它所在的模块。下面是 Python 2.7 交互式会话的实例,从 Python 3.0 中引入 Unicode:

   Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit

   (Intel)] on win32

   Type "help", "copyright", "credits" or "license" for more

   information.

>>> type("foo") # 旧的字面值

<type 'str'>

>>> from __future__ import unicode_literals >>> type("foo") # 现在变成了 unicode

<type 'unicode'>

下面列出了所有可用的__future__语句,关注 2/3 兼容性的开发者都应该知道。

• division:Python3新增的除法运算符(PEP238)。

• absolute_import:将所有不以点字符开头的import语句格式解释为绝对导入

(PEP 328)。

• print_function:将print语句变为函数调用,所以在print后面必须加括

号(PEP 3112)。

• unicode_literals:将每个字符串解释为Unicode(PEP3112)。 __future__中的可选语句列表很短,只包含几个语法功能。对于其他变化的内容,例如元

类语法(第 3 章会讲到这一高级特性),维持其兼容性则困难得多。future 语句也无法完全解 决多个标准库重组的问题。幸运的是,有些工具旨在提供一致可用的兼容层。最有名的就是 Six 模块,提供了常用的 2/3 兼容性的整个样板。另一个很有前途但名气稍逊的工具是 future 模块。

在某些情况下,开发人员可能不想在一些小型 Python 包里添加其他依赖项。通常的 做法是将所有兼容性代码放在一个附加模块中,该模块通常命名为 compat.py。下面是 来自 python-gmaps 项目的 compat 模块实例:

      # -*- coding: utf-8 -*-

      import sys

if sys.version_info < (3, 0, 0): import urlparse # noqa

def is_string(s):

return isinstance(s, basestring)

else:


1.6 不只是 CPython 9

from urllib import parse as urlparse # noqa

def is_string(s):

return isinstance(s, str)

这样的 compat.py 模块十分常见,即使是利用 Six 保持 2/3 兼容性的项目也很常见, 因为这种方法非常方便,用于保存在不同版本的依赖包之间保持兼容性的代码。

下载示例代码

你可以用自己的账号在 Packt 的官方网站下载本书的示 例代码文件。如果你是在其他地方购买的本书,你可以 访问 Packt 的官方网站并注册,文件会直接通过邮件发 送给你。

下载代码文件的步骤如下。

• 用你的电子邮件地址和密码登录或注册我们的网站。 • 将鼠标指针悬停在顶部的SUPPORT选项卡上。 • 单击CodeDownloads&Errata。

• 在Search框中输入本书的名字。

• 选择你要下载代码文件的书籍。

• 从下拉菜单中选择本书的购买途径。

• 单击CodeDownload。 文件下载完成后,请确保用下列软件的最新版本对文件 夹进行解压或提取。

• 在Windows上用WinRAR或7-Zip。

• 在Mac上用Zipeg、iZip或UnRarX。

• 在Linux上用7-Zip或PeaZip。 本书的代码包也托管在 GitHub,网址为 https://github.com/ PacktPublishing/Expert-Python-Programming_Second- Edition。在 GitHub 上还有大量图书和视频资源。去看 一下吧!

1.6 不只是 CPython

最重要的 Python 实现是用 C 语言编写的,叫作 CPython。大多数人在讨论 Python 时 指的都是 CPython。随着语言的进化,C 语言实现也相应发生变化。除了 C 之外,Python

 

10 第1章 Python现状 还有其他几种实现方式,这些实现方式都在努力地跟上主流。大多数实现方式的时间表都

要落后于 CPython,但它们提供了一个好机会,可以在具体环境中使用并推广 Python 语言。 1.6.1 为什么要关注 Python 实现

Python 实现有许多种。在 Python 官网上关于这一话题的维基百科页面中,主要介绍了 20 多种语言变体、方言或除 C 语言之外的 Python 解释器实现。其中一些只是实现了语言核心 语法、功能和内置扩展的一个子集,但至少有几个与 CPython 几乎完全兼容。最重要的是, 虽然其中一些只是玩具项目或实验,但大部分都是为了解决某些实际问题而创建的,这些 问题要么是用 CPython 无法解决,要么需要开发人员花费巨大的精力。这些问题的实例包 括如下几个。

• 在嵌入式系统中运行 Python 代码。

• 与运行框架(如 Java 或.NET)或其他语言做代码集成。

• 在 Web 浏览器中运行 Python 代码。

本节将简要介绍目前 Python 开发人员可用的最流行和最新的 Python 实现。

1.6.2 Stackless Python

Stackless Python 自称 Python 增强版。之所以名为 Stackless(无栈),是因为它没有依赖 C 语言的调用栈。它实际上是修改过的 CPython 代码,还添加了一些新的功能,在创建 Stackless Python 时 Python 核心实现中还没有这些功能。其中最重要的功能就是由解释器管理的微线 程,用来替代依赖系统内核上下文切换和任务调度的普通线程,既轻量化又节约资源。

Stackless Python 最新可用的版本是 2.7.9 和 3.3.5,分别实现的是 Python 2.7 和 3.3。在 Stackless Python 中,所有的额外功能都是内置 stackless 模块内的框架。

Stackless Python 并不是最有名的 Python 实现,但很值得一提,因为它引入的思想对编 程语言社区有很大的影响。将 Stackless Python 中的内核切换功能提取出来并作为一个独立 包发布,名为 greenlet,现在是许多有用的库和框架的基础。此外,它的大部分功能都 在 PyPy 中重新实现,PyPy 是另一个 Python 实现,我们将稍后介绍。

举报

相关推荐

0 条评论