web 组件,界面

原型,多媒体

当今谁在使用Python?

在写本书时,对当今全球 Python 用户数量的最好估计大概是 100 万(可能会多一点少一点)。这个估计基于各种统计,如下载率、 web 统计和开发者调查。因为 Python 是开源的,更准确的统计是困难的 —— 没有许可登记系统来计数。而且,Python 自动包含在许多 Linux 的发行版,Mac 系统电脑和很多产品和硬件中,这进一步让统计用户数量变得更困难。 然而,总的来说,Python 拥有一个大的用户组和一个非常活跃的开发者社区,它通常被认为是当今世界最广泛使用的编程语言的前 5 名或前 10 名(准确的排名取决于数据源和日期)。因为 Python 已经存在了超过 20 年,并且一直被广泛使用,所以它仍是非常稳定和健壮的。 除了被个人用户充分利用外。 Python 也一直被真实的公司应用在真实的创收产品中。比如,下面就是熟知的 Python 用户群:
  • Google 在它的网络搜索系统中广泛使用 Python。
  • 流行的 YouTube 视频共享服务主要就是用 Python 写的。
  • Dropbox 存储服务的服务器和客户端软件都主要是用 Python 编码的。
  • Raspberry Pi 单板电脑鼓励将 Python 作为它的教育语言。
  • 由 CCP Games 出品的大规模的多人在线游戏(MMOG)EVE online 广泛使用了 Python。
  • 广泛使用的 BitTorrent 点对点文件共享系统开始于一个 Python 程序。
  • Industrial Light & Magic, Pixar, 和其它公司在动画电影的制作中使用 Python。
  • ESRI 将 Python 作为它流行的 GIS 地图产品的一个终端自定义工具。
  • Google 的 APP Engine Web 开发框架使用 Python 作为一门应用语言。
  • IronPort 邮件服务器产品使用超过 100 万行的 Python 代码来完成工作。
  • Maya(强大的 3d 建模和动画系统)提供一个 Python 的脚本 API。
  • NSA 使用 Python 来加密和智能分析。
  • iRobot 使用 Python 来开发商业和军事机器人设备。
  • Civilization IV 游戏的自定义脚本事件完全是用 Python 来写的。
  • 每个孩子一台笔记本电脑(OLPC) 项目用 Python 建立了它的用户界面和活动模型。
  • Netflix Yelp 都在它们的文档中记录了 Python 在软件基础设施中的作用。
  • Inter, Cisco, Hewlett-PackardSenate, Qualcomm IBM 使用 Python 来进行硬件测试。
  • JPMorgan Chase,UBS, Get Citadel 将 python 应用在金融市场预测。
  • NASA, Los Alamos, Fermilab, JPL 和其它公司使用 Python 进行科学编程任务。
如此等等。虽然这个列表是有代表性,但一个完整的统计超出了本书的范围,而且它是肯定会随着时间而改变的。要获取额外的 Python 用户,应用和软件的一个实时抽样列表,可以试着在 Python 网站和维基百科还有你在自己喜爱的 web 浏览器中访问下列的页面和进行搜索: 就应用领域而言,当前使用 Python 的公司可能唯一的共同点就是 Python 使用在各个领域。它的通用特性使得它可能被应用到几乎所有的领域,而不只是一个。事实上,几乎所有大的软件公司都在使用 Python,不管是短期的战术任务,比如测试和管理,或者是长期的战略产品开发。 Python 已经证明了它在两种模式都能工作得很好。 本文章首发在 LearnKu.com 网站上。

上一篇下一篇

Markdown 文本

纠错改进

我可以用 Python 做什么?

除了是一种设计良好的编程语言, Python 还对完成真实世界的任务有用,这些任务就是开发者日以继日完成的事情。作为脚本化其它组件和实现独立程序的工具,它可以广泛地应用到许多领域。事实上,作为一门通用语言, Python 的角色几乎是无限的。你可以将它用在从 web 开发到游戏,到机器人技术和宇宙飞船控制等所有事情。 然而,目前最常见的 Python 角色似乎可以分为几大类。下面的几个章节描述了当今一些 Python 最常见的应用和在每个领域中使用的工具。我们无法在这里深入探讨这些工具。如果你对这里的任何主题感兴趣,参见 Python 网站或者其它资源来获取更多细节。

我可以用 Python 做什么?—— 系统编程

Python 对操作系统服务的内置接口使得它很适合编写

我可以用 Python 做什么?—— 图像用户界面

Python 的简单和快速开发能力使得它很适合桌面上的图形用户界面编程。Python 附带了一个名为 tkinter 的 Tk GUI API(在 2.X 是 Tkinter) 的一个标准面向对象接口,它允许 Python 程序实现带有原生外观和感受的可移植 GUI。 Python/tkinter GUI 运行在 微软的 windows,X window(在 Unix 和 linux) 和 Mac OS(经典和 OSX)上,而不需要进行任何修改。一个免费的扩展包 PMW 向 Tkinter 工作包添加了高级的组件。另外, 基于 C++ 库的 wxPython GUI API,为在 python 中构建可移植的 GUI 提供了一个代替的工具包。 Dabo 这样的高级工具包是建立在基础 API 如 wxPython 和 tinter 之上的。使用合适的库,你也可以在 Python 中使用其它工具包里面的 GUI 支持。比如用 PyQt 库实现 Qt 的 GUI,使用 PyGTK 库实现 GTK 的 GUI,使用 Pywin32 库实现 MFC 的 GUI,使用 IronPython 库 实现 .NET 的 GUI,使用 Jython 库(Python 的 Java 版本,在第二章中有描述)或者 JPype 库 来实现 Swing 的 GUI。对于运行在 web 浏览器或者有简单界面需求的应用程序,Jython 和 Python web 框架和服务端 CGI 脚本(在下一节中有描述)都提供了额外的用户界面选项。

我可以用 Python 做什么?—— 互联网脚本编程

Python 附带有标准 Internet 模块,允许 Python 程序在客户端和服务器模式下执行许多网络任务。脚本可以通过套接字通信;提取发送到服务端 CGI 脚本的信息;通过 FTP 传输文件;解析和生成 XML 和 JSON 文档;发送,接收,编写,解析 email。通过 URL 获取 web 页面;解析获取 web 页面的 HTML;通过 XML-RPC、SOAP 和 telnet 等协议通信,以及更多。 Python 的库使得这些任务变得非常简单。 另外,网上有许多第三方的工具也可以用来在 Python 中进行 Internet 编程,比如 HTMLGen 系统从基于 Python 类的描述产生 HTML 文件。mod_python 包在 Apache 的 web 服务器里面高效地运行 Python,并用它的 Python 服务器页面支持服务器端模板功能。Jython 系统提供了 Python、 Java 的无缝集成,支持运行在客户端的服务端小程序编程。 另外,成熟的 web 开发框架包如 DjangoTurboGears web2py PylonsZope WebWare,都支持使用 Python 快速构建全功能和生产质量的网站。其中许多框架都包含如对象关系式映射器、模块 / 视图 / 控制器架构、服务端编程和模板,以及 AJAX 支持,以提供完整的和企业级的 web 开发方案。 最近,Python 已经扩展到富 Internet 程序,带有一些工具如在 IronPython 中的 Silverlight,和 pyjs(又名 pajamas)和它的 Python 转 Javascript 编译器,AJAX 框架和 UI 小组件。用 App Engine 和其它在后面数据库章节讨论的技术, Python 也进入了云计算领域。 Web 引领到哪里, Python 很快就会跟上。

我可以用 Python 做什么?—— 组件集成

之前当描述 Python 作为一门控制语言的时候,我们讨论了它的组件集成作用。 Python 可以被 C 和 C++ 系统扩展也可以嵌入 C 和 C++ 系统的能力使得它特别适合作为一门灵活的胶水语言,来脚本化其它系统和组件的行为。比如,将一个 C 库集成到 Python,使得 Python 能测试和启动这个库的组件,并能将 Python 嵌入到一个产品中,使得在线自定义编码无需重新编译整个产品(或者根本无需发行其源代码)。 SWIGSIP 代码生成器这些工具能自动化需要的许多工作,以链接编译好的组件到 Python 脚本中使用,并且 Cython 系统允许程序员混合 Python 和类 C 的代码。更大的框架,如 Python 在 windows 上的 COM 支持,基于 Java 的实现 Jython,和 基于.NET 实现的 IronPython,都提供了脚本化组件的替代方案,比如,在 windows 上,Python 脚本可以使用框架来脚本化 Word 和 Excel,访问 Silverlight,还有更多。的系统管理工具和实用程序(有时称为 shell 工具)。 Python 程序能搜索文件和目录树,启动其它程序,使用进程和线程进行并行处理等等。 Python 的标准库附带了 POSIX 绑定(也就是支持许多 POSIX 接口)并且支持所有常用的 OS 工具:环境变量、文件、套接字、管道、进程、多线程、正则表达式模式匹配、命令行参数、标准流接口、 shell 命令启动器、文件名扩展、 ZIP 文件工具、 XML 和 JSON 解析器、 CSV 文件处理器等等。另外,大部分 Python 系统接口被设计为可移植的,比如拷贝目录树的脚本通常在所有主流的 Python 平台上都能够不变的运行。在第二章中和 EVE online 使用的 Stackless Python 实现,也对多进程编程的要求提供了高级的解决方案。

我可以用 Python 做什么?—— 数据库编程

对于传统的数据库需求,有适合于所有日常使用的关系式数据系统(Sybase, Oracle, Informix, ODBC, MySQL, PostgreSQL, SQLite 还有更多)的 Python 接口。 Python 世界还定义了一个可移植的数据库 API,用来从 Python 脚本访问 SQL 数据库系统,这个脚本在许多底层数据库系统的表面看起来是一样的。比如,因为数据库供应商接口实现了 Python 提供 的可移植 API,在免费的 Mysql 系统工作的脚本将会在其它系统上如 Oracle 上面正常工作,基本上不需要进行修改。一般,你所需要做的一切就是替换底层的供应商接口。嵌套了 SQL 数据库引擎的进程内(与 Python 解释器同进程)的 SQLite 是 Python 2.5 版本后的一个标准部分,支持原型化和基本的程序存储需求。 注意这里的 ODBC 是一个标准,把它跟其它数据库放在一起比较是不合适的。 在非 SQL 领域,Python 的标准 pickle 模块提供了一个简单的

我可以用 Python 做什么?—— 快速原型化

对于 Python 程序,用 Python 和 C 编写的组件看起来是一样的。因为这个原因,可能一开始用 Python 来对系统做一个原型,然后将选择的组件移入编译型语言如 C 或 C++ 以交付。不像一些原型化工具,一旦原型稳定下来, Python 就不需要全面重写代码。为了维护和使用的简便,系统中不需要像 C++ 语言那么高效率的部分可以仍用 Python 来编写。系统,它允许程序简单的保存所有 Python 对象为文件和类文件对象,反之亦然。在 Web 上,你还将发现名为 ZODBDurus 这些第三方的开源系统,它们为 Python 脚本提供了完整的面向对象数据库系统;其它的,如 SQLObjectSQLAlchemy 实现了对象关系式映射(ORMs),它将 Python 的类模型绑定到关系式表格上;还有 PyMongo,一个连接 MongoDB 的接口,一个高性能、非 SQL、开源的 JSON 风格的文本数据库,它以非常类似 Python 本身的列表和字典的结构存储数据,这些数据的文本可以使用 Python 自身的标准库 JSON 模块来解析和创建。 其它系统还提供更专门的方式来存储数据,包括在 Google 的 App Engine 中的数据仓库,它用 Python 类来建模数据,提供了强大的扩展性。其它新兴的云存储可选项有如 AzurePiCloudOpenStackStackkato

我可以用 Python 做什么?—— 数字和科学编程

Python 在数字编程领域 —— 传统上被认为不属于脚本语言范围的领域,但已经成长为 Python 最吸引人的用例之一 —— 也被大量使用。这里最突出的,就是之前提过的 NumPy 这个高性能的 Python 数字编程扩展,它包括了如数组对象、标准数学库接口还有其他更多的高级工具。通过将在编译型语言中编码的数字程序集成到 Python 中以加快速度,NumPy 将 Python 变成了一个高级的但容易使用的数字编程工具,能经常替换在传统编译型语言如 FORTRAN 或 C++ 中编写的现存代码。 其他的 Python 数字工具支持动画、3D 可视化、并行处理等等。比如,流行的 SciPyScientificPython 等扩展提供了科学编程工具的额外库并用 NumPy 作为核心组件。Python 的 PyPy(在第 2 章中讨论) 实现在数字领域也开始流行,部分是因为这种领域中很常见的重度算法化代码在 PyPy 中能运行得快很多 —— 通常快 10 倍到 100 倍。

我可以用 Python 做什么?—— 还有更多:游戏、图像、数据挖掘、机器人、Excel。。。

Python 通常应用的领域比下面能讨论的更多。比如,你将找到工具允许你使用 Python 来做:
  • pygame, cgkit, pyglet, PySoy, Panda3D 等来进行游戏编程和多媒体应用。
  • 使用 PySerial 扩展 在 windows、 Linux 和其他操作系统进行串口通信。
  • 使用 PIL 和它的更新的 PILLOW 分支,PyOpenGLBlender Maya 等来进行图像处理。
  • 使用 PyRo 工具集来进行机器人控制编程。
  • 使用 NLTK 包来进行自然语言分析。
  • Raspberry Pi 和 Arduino 主板上进行系统物理参数(如温湿度)测量。
  • 将 Python 移植到 Google Android 和苹果的 iOS 平台进行移动计算。
  • PyXLL DataNitro 扩展来进行 Excel 工作表函数和宏编程。
  • PyMedia, ID3, PIL/Pillow 等来处理媒体文件内容和元数据标签。
  • PyBrain 神经网络库和 Milk 机器学习工具集来进行人工智能的研究。
  • 使用 PyCLIPS, Pyke, Pyrolog, 和 pyDatalog 来进行专家系统编程。
  • 用 Python 编写和自定义的 zenoss 来进行网络监控。
  • 使用 PythonCAD, PythonOCC, FreeCAD 等来进行 Python 脚本化设计和建模。
  • 使用 ReportLab, Sphinx, Cheetah, PyPDF 等来进行文本处理和生成。
  • 使用 Mayavi, matplotlib, VTK, VPython 等来进行数据可视化。
  • 使用 xml 库包和 xmlrpclib 模块,还有第三方扩展来进行 XML 解析。
  • 使用 json 和 csv 模块来进行 JSON 和 CSV 文件处理。
  • 使用 Orange 框架,Pattern bundle,Scrapy (均属于 Orange 软件套件)还有自定义代码来进行数据挖掘。
甚至你还可以用 PySolFC 程序来玩 solitaire(一个单人纸牌游戏)。当然,你总是可以在时髦用语更少的领域来编写自定义的 Python 脚本,以执行日常的系统管理,处理你的邮件,管理你的文档和媒体库。你还将在 PyPi 网站上,和通过网络搜索( 搜索 Google 或 Python 官网来找链接)找到许多领域的支持链接。 虽然 Python 有广泛的实际应用,但这里许多指定的领域很大程度上都只是 Python 组件集成正在进行的应用的例子。将 Python 作为以编译型语言如 C 写好的库或和库组件库的前端,使得它适合在许多领域编写脚本。作为一门支持集成化的通用语言, 它的使用范围很广。