2019 年 9 月

第 34 卷,第 9 期

[孜孜不倦的程序员]

Python 简介

作者:Ted Neward | 2019 年 9 月

Ted Neward过去几年从热门程度来说 Python 已“成为主流”,一些调查和民意测验将其评为新晋最热门语言。他们认为,很难说 Python 是否会占领整个世界,但似乎它对数据科学和人工智能/机器学习领域存在相当强的影响力,仅凭这个原因,就足以激发对 Python 语言的学习兴趣。

Python 将相对简单的语法和编程模型相结合,并可通过可扩展的模块与基础 OS 相连,从而为本专栏及时提供了值得探讨的新话题。我将在接下来的几个议题中探讨 Python 的语法、语义和其生态系统中几个有趣的库,以及...谁知道呢?

要事第一

但是,在开始本次探讨之前,我必须提出必要的免责声明:正如我的几乎所有专栏中所述,我完全不是在提倡用 Python 替换你现有的 C#(或 Visual Basic)代码。Python 与众多其他语言一样,是一种可以利用的有用工具,如果认为自己的情况适合使用 Python,那就使用。但我认为不存在可以使用 Python 而无法使用 C# 完成的任务,二者只是使用方式不同罢了。

此外,我想澄清一个常见的误解:虽然 Python 社区坚持使用蛇或爬行动物的双关语来命名其许多包和库,但实际上该语言并不是以世界各地不同丛林中繁衍生存的大型蟒蛇来命名的。其实 Python 这一名称源自另一个著名的 Python:Monty Python(巨蟒剧团)。就是《巨蟒剧团之飞翔的马戏团》里的剧团,是几十年前英国的经典喜剧团体。在任何示例代码中使用相关电影或剧集中的引文和例子是 Python 文化的高度体现,给力的 Python 支持者不会错过顺便说一两句俏皮话的机会。甚至其网站也坚持这种习俗。

你一定对此已有所了解。

开始使用

Python 入门比看起来容易多了,原因有两个。其一,使用 Visual Studio 安装程序即可快速安装 Python 的一个版本。该版本名为 Anaconda,是 Python 和环境管理工具的打包版本,我稍后会对此进行介绍。其二,多亏 Linux 的 Windows 子系统 (WSL),Python 变成了一个简单的 bash-shell 命令行命令,并可使用自己所选的包管理器。例如,如果在 WSL 环境中安装了 Ubuntu,打开 Ubuntn bash-shell 提示符并键入 “sudo apt-get install python3” 就能轻松获得 Python。 此外,从 5 月起,如果你运行的是 Windows 10,可通过 Windows 应用商店获取 Python;有关详细信息,请访问 bit.ly/2JMxC3A

如果这两个选择都没有打动你,当然,还有许多其他选择。Python 网站提供基于 Windows 的安装程序,适合更喜欢直接从初始源安装 Python 的人。或者适合真的只想从初始源安装的人,Python(与现在大多数语言一样)托管在 GitHub 上,可以从头开始构建。十年前这两种方法可能都是首选方法,但最近成功将包管理器捆绑为该语言的核心部分(始于 Ruby 和 gems,然后迁移到 Node 和 npm,更不用说 Java 和 Maven、.NET 和 NuGet 等)则意味着现代 Python 安装需要附带包管理工具,这在核心 Python 领域中称为“pip”。 随着人们对 Python 的兴趣持续增长,也出现了其他部署系统,包括上述 Anaconda 及其“conda”实用工具。没有必要强调选择这两种中的哪一个,因为它们都能达成你的目的。在大多情况下,如果使用 Visual Studio 附带的 Anaconda 安装,就会使用 conda,如果选择 Python 网站中的安装程序,则会使用 pip。

需要注意的另一个因素是 Python 在两方面分别有两种主要配置。其一,Python 同时提供 64 位和 32 位的版本;这两种的差异相当明显。其二,Python 正在正式进行一次难度较高的过渡,即从 Python 2 过渡到 Python 3。出于对我们来说不太重要的原因,Python 的创造人 Guido von Rossum 决定对该语言做出重大改变,并在实现这些更改时提高了版本号。人们曾普遍认为所有人都能快速过渡,但...这并没有发生。或者说,它仍在过渡中。在本系列的介绍中,我会使用 Python 3,因为任何新的 Python 项目都应从 Python3 开始,但你可能会遇到仍需要 Python 2 的包或库。

安装 Python 后,就可以开始使用了。如果已选择安装 Anaconda,就启动已安装的名为“Anaconda 提示符”的开始菜单项。(Visual Studio 2019 实际将其安装为“Python 提示符”)该操作会调出一个为 Anaconda Python 设置环境的命令提示符,它看起来会有点奇怪,因为它在基于目录的常规提示符(在我的计算机上“C:\Users\Ted>”)前会含有类似 “(base)” 的内容。这是因为 Anaconda 正在为你管理不同的“环境”,以后我会在专栏中详细介绍。现在,只需键入“python”,启动 Python“读取–求值–打印”循环 (REPL),即交互式环境,在打印版本横幅后,会显示“>>>”提示符。

此时,为纪念“计算机科学众神”,调出问候习语:

print("Hello, Python world")

如果将此键入 REPL,会立即打印出问候语并显示另一个“>>>”提示符;如果愿意,可以将其放入文件 (hello.py) 中然后从 Anaconda 提示符(“python hello.py”)运行它。无论哪种方式,都能实现目的,现在可以在简历上列出“Python 程序员”。

如果希望将消息捕获到变量中(可能是为了以后重用),可以这样编写它:

message = "Hello again, "
message += "Python world"
print(message)

请注意,首次使用本地变量 message 之前不需要声明,也无需像 JavaScript 的“var”(或“let”或“const”)那样的“声明关键字”。Python 支持字符串,显然,也支持布尔值、数值、列表、元组、集(禁止重复项的列表)和字典(如果需要还可包括元组列表或键值对)作为内置类型。(在以后的专栏中会介绍如何构建自定义对象类型,并进一步详细探讨每种基元类型的含义。) 变量本身是完全没有类型的,这意味着可以随时为本地变量分配任何类型的值,如下所示:

# By the way, this is a comment
message = "Hello again, "
message += "Python world"
print(message)
message = 5
print(message)

但是,这也引出了需要注意的关键一点:每当首次引入某个变量时,都需要为其分配一个值,否则 Python 会认为你正在尝试引用以前定义的变量。不过,考虑到始终可以分配零或空字符串或任何看似合理的默认值,这一点代价是完全值得的。

最后一个且需要经常注意的一点:从示例第一行可以看出,哈希符号(对比较关注这类内容的人来说称为“octothorpe”更恰当)是 Python 中的行尾注释字符。但与许多其他语言不同,Python 没有多行注释符号,这意味着要注释掉大量代码就不那么容易。但这完全符合 Python 的口号:“只有一种方法可以完成”;放在本例中来理解,就是只有一种注释方法。

执行 Python

有多种方式可运行此代码。

首先,从 Windows 命令行开始,假设 Python 位于 PATH 上,只需将 Python 文件的名称传递给解释器(如“python hello.py”)即可执行脚本。 这可能是至少一半你所编写的 Python 应用程序的运行方法,尤其是在使用该工具生成图形或运行 Web 服务器时。

在这一点上,有一个有趣的变体,虽然只适用于 Windows,就是如果使用基于 Windows 的安装程序将 Python 安装到计算机上(而不是从初始源安装),Python 会在 Windows 注册表中注册自身,并声明“.py”文件扩展。此外,如果“.PY”被追加到 Windows 命令提示符中的“PATHEXT”环境变量中,就可以按看起来直接可执行的方式来运行 Python 脚本(因为它们将变为直接可执行 - 此环境变量包含要变为直接可执行的所有文件的扩展名,如 COM、EXE、BAT、CMD 等)。此特定行为完全特定于 Windows,请注意,该行为并不仅限于 Python,只要注册表中设置了“应用程序到文件”扩展名注册,任何文件扩展名都可以在 PATHEXT 环境变量中注册和成为“直接可执行”。

但是,在 Unix 系统上,始终可以在脚本顶部设置“She-bang”行;对于不熟悉 Unix 行为这一方面的人来说,当脚本“直接执行”(例如通过在命令行键入"hello.py")时,Unix 将检查脚本的第一行,如果它读取到类似“#!/usr/bin/env python3”的代码,操作系统将假定它是一个为了运行此特定脚本而要执行的命令行。

总结

这只是介绍 Python 的几篇文章中的第一篇文章,还需要探讨一些主题,你才能真正了解 Python 以及如何使用它。我将在下一篇文章中介绍 Python 的流控制构造,其中会探讨 Python 的又一个有趣的方面:大量空格。祝编码愉快!


Ted Neward是本部位于西雅图的 Polytechnology 公司的顾问、讲师和导师。他写过大量文章,独自撰写并与人合著过十几本书,并在世界各地发表演讲。可通过 ted@tedneward.com 与他联系,也可阅读他的博客 blogs.tedneward.com

衷心感谢以下技术专家对本文的审阅:Harry Pierson


在 MSDN 杂志论坛讨论这篇文章