在当今的人工智能(AI)和机器学习(ML)软件中,程序员最有可能遇到的编程语言是 Python 和 C/C++。大多数情况下,C/C++ 用于特殊应用,比如嵌入式物联网(IoT)设备和高度优化的、特定于硬件的神经网络库。Python 是大多数 AI 和 ML 应用开发中最常用的语言——即使是用于原型设计和优化那些 IoT 和硬件加速应用的模型。对于从 C#、Java 甚至 JavaScript 等其他语言转向 Python 的开发者来说,本文将介绍 Python 独特语法的关键要素,比如循环,以及它们与所知的不同之处。
本系列的后续文章将探讨AI和 ML 开发者可用的众多 Python 库,如 OpenCV、自然语言工具包(NLTK)、Keras 和 TensorFlow。本文将介绍 Python 的重要基础知识,包括:
如何获取 Python
开发者通常问的第一个问题是:从哪里获取 Python?答案是:这取决于系统和编程环境。Python 默认安装在 Mac OS 和一些 Linux 发行版上。对于没有安装 Python 的系统,可以从以下途径获取安装程序:
另一个选择是 Jupyter Notebooks 和 JupyterLabs 交互式开发工具。第三种选择——也是推荐并在这些 PythonAI/ML 文章中使用的——是 Anaconda,这是一个专门为统计、数据科学和 AI/ML 项目设计的综合性软件平台。Anaconda 包括前面提到的基于 Web 的 IDE JupyterLab,以及在学习 AI 时可能需要的许多其他工具、库和示例数据源。一旦开始讨论机器学习库、数据集和可视化,会发现它们很有帮助。
选择哪个版本:Python2 还是 Python 3?
对于 Python 新手来说,使用 Python 2 还是 Python 3 是一个常见的困惑。Python 2 是一个较老的版本,仍然相当常用,并且在一些当前的操作系统中仍然作为默认版本的 Python 安装。官方对 Python 2 的支持将在 2020 年初结束。如果刚开始使用 Python,应该使用 Python 3。Python 3 的持续支持和发展正在进行中。可能会使用的库也是如此:一些可能仍然支持两个版本,但许多已经完全转向 Python 3 或者很可能会这样做。
如何知道系统上安装了哪个版本?
在 Linux 系统和 Mac OS 上,python
命令默认为 Python 2,而 python3
命令用于 Python 3。要确定系统上安装了哪个版本,打开终端窗口或命令提示符,然后运行以下命令:
python --version
python3 --version
如果 Python 已安装,它将返回 python
命令使用的 Python 版本。
在代码示例中识别Python版本
在线教程并不总是明确指出它们使用的是 Python 2 还是 Python 3。幸运的是,可以使用一些启发式方法来确定教程使用的是哪个版本。
一个区别是文本在标准输出上的打印方式。在 Python 3 中,只有一种有效的方式来做到这一点:
print("Hello, world!")
这种语法在 Python 2 中也是有效的,但 Python 2 示例更常用这种替代语法:
print "Hello, world!"
这在 Python 3 中是无效的。因此,没有括号的 print
语句清楚地表明代码是用 Python 2 编写的。
另一个常见的区别是代码如何通过标准输入(stdin)获取输入。在 Python 3 中,读取原始输入是通过 input
函数完成的。在 Python 2 中,input
函数也存在,但在那里它将输入评估为 Python 代码并返回结果。对于原始输入,Python 2 使用 raw_input
。这个函数在 Python 3 中不存在。
如果代码片段不与标准输出/输入交互,可以查看标准库中使用的功能。Python 3 中发生变化的功能列表会让离题太远,但可以查看《保守的 Python 3 移植指南》以获得更完整的列表。
话虽如此,用 Python 2 编写的很多代码在 Python 3 中也能很好地工作。如果对代码片段有疑问,试着在 Python 3 中运行它。如果因为 Python 版本而不工作,在网上搜索错误消息会很快指出问题所在。
Python 语言基础:类型和变量
Python 是动态类型的。类型与变量名不关联,只与变量值关联。这与 C# 和 Java 等静态类型语言不同,在静态类型语言中,如果定义了 int i = 0;
,不能稍后写 i = "test";
。在 Python 中,可以这样做。
Python 是强类型的(与 JavaScript 等弱类型语言相对)。在强类型语言中,对不同类型值之间的操作有更严格的限制。在 JavaScript 中,可以做 "abc" + 1
并最终得到一个字符串 "abc1"
,但如果在 Python 中尝试相同的操作,会得到一个错误,表明不能将字符串与整数连接。
在Python中赋值变量可以这样做:
name = "value"
注意行尾没有分号。定义和调用函数看起来像这样:
def say_hello(who): print("Hello ", who)name = input("Your name: ")say_hello(name)
在 Jupyter Notebook 中看起来像这样:
与 C# 等语言不同,Python 不使用括号来指定哪些代码行属于函数。相反,Python 使用缩进。具有相同缩进级别的一系列行形成一个块。推荐的方式是每个缩进级别使用四个空格。不过,也可以使用制表符或另一个数量的空格。缩进只需要在块内保持一致。
可以使用 return
关键字从函数中返回一个值:
def sum(a, b): return a + b
如果函数没有 return
语句,它将返回 None
(Python 的 null
)。
Python 支持高阶函数(返回函数或接受函数作为参数的函数)。例如,operation
函数返回两个函数中的一个:
def sum(a, b): return a + bdef difference(a, b): return a - bdef operation(calculate_sum): if calculate_sum: return sum else: return difference
然后可以这样使用:
operation(True)(5, 4)
结论
讨论了 Python 2 和 Python 3 之间的区别,以及如何识别代码片段中使用了哪个版本。然后看了一些 Python 的基础知识:类型、变量和函数。在下一篇文章中,将讨论列表、元组和循环!