编写第一个 Python 程序

环境配置就绪后,现在让我们正式敲下第一行代码。本节将带大家了解 Python 程序的基本运行机制,演示如何通过交互模式与脚本文件来执行代码,并学习如何为项目创建标准的虚拟环境。

计算机编程相关知识#

为了理解代码被计算机执行的底层逻辑,我们需要掌握基本的编程概念。本节仅对几个最核心的编程常识进行极简科普,为接下来的实操扫清认知障碍。

指令(Instruction)
计算机能够理解并执行的最小操作单元。简单来说,它就是我们下达给机器的“单步命令”。在编写 Python 程序时,我们敲下的每一行有效代码,本质上都是在向计算机发送一条具体指令(例如完成一次数值相加,或在屏幕上打印一段文字)。
程序(Program)
是为了完成某项特定任务,用编程语言编写的一组指令序列。程序主要关注底层的逻辑和计算过程。你接下来要编写的每一个 Python 脚本,本质上都是一个程序。
软件(Software)
一个更宽泛的工程产品概念。它不仅包含计算机程序,还包括运行这些程序所需的配置文件、静态数据以及相关的说明文档(软件 = 程序 + 数据 + 文档)。可以说,程序是软件的核心“发动机”,而软件是一辆可以直接交付给用户驾驶的“汽车”。
源代码(Source code)
指一系列人类可读的计算机语言指令。它本质上就是普通的文本文件,只是后缀名不同(例如 .txt 变成了 .py)。计算机程序、库以及相关数据的集合统称为软件(Software)。
语句(Statement)
表示程序要执行的一个“动作”。比如“把大象装进冰箱”或“退出程序”。不能再包含其他语句的称为简单语句,包含其他语句的称为复合语句。语句本身没有值。
表达式(Expression)
一个或多个常量、变量、函数和运算符的组合。比如数学中的 2 + 2。对表达式进行计算以产生结果的过程叫作求值。表达式一定有一个确定的结果值。
程序设计(Programming)
设计和构建一个可执行的计算机程序以解决特定问题的过程。程序设计绝不仅仅是“敲代码”,它通常包含问题分析、算法设计、代码编写、测试运行以及错误调试(Debug)等多个阶段。
编程语言(Programming language)
编程语言是用来定义计算机程序的形式语言,是人类向计算机下达指令的标准交流技巧。
脚本语言(Scripting language)
编程语言的一个子集。它的诞生是为了省去传统 C/C++ 那种“编写 $\rightarrow$ 编译 $\rightarrow$ 链接 $\rightarrow$ 运行”的繁琐过程。脚本语言通常由解释器边读取边执行,简单易用,极大地提高了开发效率。脚本通常以文本保存,只在被调用时进行解释或编译。

使用交互模式编程#

Python 提供了两种运行代码的方式:

  • 交互模式(Interactive Mode):像聊天一样,你输入一句,计算机马上回答一句。
  • 源文件模式(Script Mode):写完一整篇文章(脚本),交给计算机一次性读完并执行。

打开终端(或命令提示符),输入 python(或 pypython3)并回车,你会看到屏幕上打印出版权和版本信息,最后停留在主提示符 >>> 处。恭喜你,你已经成功进入了 Python 的交互模式

 Python 交互模式

Python 交互模式

在交互模式中,解释器会等待你输入指令。由于它具有“读取-求值-输出-循环”(REPL)的特性,它会自动打印出每一个表达式的结果。因此,你可以把 Python 交互模式当成一个极其强大的科学计算器来使用。

请在 >>> 后尝试输入以下代码并观察结果:

>>> 2 + 2
4
>>> (50 - 5*6) / 4
5.0
>>> 8 / 5  # 除法运算永远返回一个浮点值
1.6
>>> 5 ** 2  # 两个星号 ** 组成的运算符用于计算乘方
25
>>> width = 33.3  # 等号运算符用于赋值
>>> height = 2
>>> width * height
66.6
>>> exit()  # 通过调用该函数退出交互模式
退出方法

除了输入 exit(),你也可以按下快捷键 Ctrl+Z 再按回车(Windows),或按 Ctrl+D(macOS/Linux)来退出交互模式。

更多进阶练习:

>>> print('Hello, world!')
Hello, world!
>>> x = 33
>>> print(x)
33
>>> x
33
>>> v = "foo = 33"
>>> v
'foo = 33'
>>> for x in "Xi'an":
...    print(x)
...
X
i
'
a
n

课堂练习

已知 a = 24.5, b = 33.7, c = 3.1,求

$$\frac{-b+\sqrt{b^{2}-4ac} }{2a}$$

答案
>>> a = 24.5
>>> b = 33.7
>>> c = 3.1
>>> (-b + (b**2 - 4*a*c)**0.5) / (2*a)
-0.09913258451513092
注意
  1. 只能输入 Python 专属代码,不能输入操作系统的命令(如 cddir)。
  2. 一次只能运行一条语句(或一个代码块)。
  3. 要显示一个表达式(如 a),可以不必输入完整的 print(a) 打印语句,而只需要输入 a 就可以自动打印表达式的结果。
  4. 当你输入像 for 循环这样的多行“复合语句”时,提示符会从 >>> 变成三个点 ...,这表示 Python 在等待你输入剩余的代码。
  5. 如何结束复合语句? 当出现 ... 时,连续按两次回车键(输入一个空行),告诉解释器你已经写完了。
  6. 在脚本模式下不需要用空行表示复合语句结束。因此,如果要把多行代码复制到交互模式下运行,请预先在每个复合语句后方加一个空行。

总结:交互模式极其适合用于语法实验、片段代码测试以及临时数学计算。但它不能保存代码,关掉窗口,你写的一切都会灰飞烟灭。

使用源文件模式编程#

交互模式不能保存代码,因此对于大多数编程情景都不适用,这时就需要使用源文件模式。源文件模式将源代码(脚本)保存在后缀为 .py 的源文件(脚本文件)中,然后命令行中通过 python 命令调用该源文件。

任务:编写 Hello, World 程序。

提示

Hello, World 程序是指在电脑屏幕显示“Hello, world!”(你好,世界!)字符串的计算机程序。相关的程序通常都是每种电脑编程语言最基本、最简单的程序,也会用作示范一个编程语言如何运作。同时它亦可以用来确认一个编程语言的编译器、程序开发环境及运行环境是否已经安装妥当。因为写法简单可见,这也是很多初学者首次接触编程语言时会撰写的程序。

我们的第一个任务是在特定目录创建一个名称为 hello.py 的源文件,大家可以讨论一下有多少种方法创建此文件。一般我们可以打开 VS Code,在其中新建一个文件,输入如下内容,然后将其保存到特定目录,取名为 hello.py

print('Hello, world!')

通过命令行执行 Python 脚本#

假如我们保存的文件路径是 C:\pycode\hello\hello.py,需要通过如下命令运行该文件:

cd C:\pycode\hello  # 改变工作目录为 hello.py 文件所在目录
python filename.py  # 执行 filename.py 脚本
Hello, world!

在开发环境中执行 Python 脚本#

以上步骤对你来说可能显得麻烦,如果你已经按前面步骤成功配置了 VS Code 或 PyCharm 开发环境,那么可以不用离开该开发环境执行 Python 脚本。
如在 VS Code 中,可以通过点击编辑器右上角的三角形的按钮运行当前打开的文件。
在 PyCharm 中,第一次运行需要通过 Run 菜单中的 Run... 子菜单,在弹出的窗口中选择某个源文件作为项目执行的入口文件。后续直接点击该菜单中中第一项 Run '<filename>' 或按 Ctrl+R 即可快速地执行项目。

将 Python 脚本文件当成可执行文件执行#

Python 脚本可以像其他脚本(如 Linux 的 Shell 脚本)一样被直接执行。

在 Windows 中,只要用 Python 程序打开对应的脚本文件,就自动执行该脚本文件了,如下图所示。不过因为我们的程序只是简单地在命令行打印一串字符就退出了,你看到的将只是一闪而过的命令行窗口。要保持窗口不退出,可以在代码的末尾加一行 input(),表示等待用户的输入,这时需要用户按回车键以后窗口才退出。

在Windows下运行Python脚本.png

在Windows下运行Python脚本.png

拓展知识#

在类 Unix 中,我们可以把 Python 源文件声明为可执行的脚本:

#!/opt/homebrew/bin/python3
print('Hello, world!')

其中第一行开头的 #! 组合字符被叫作 Shebang,其后跟 Python 解释器的路径。想要避免硬编码 Python 解释器的路径,可以写为:

#!/usr/bin/env python3
print('Hello, world!')

然后,为当前用户添加执行该脚本的权限:

chmod u+x hello.py

这时可以在命令行直接运行此脚本了:

./hello.py

创建一个虚拟环境#

在实际开发中,直接使用系统的全局 Python 环境是一个非常糟糕的习惯。假设你正在同时开发两个独立的项目:项目 A 依赖某个计算库的 1.0 版本,而项目 B 必须依赖该库的最新的 2.0 版本。如果在全局环境中安装,必然会导致版本冲突。

虚拟环境(Virtual Environment)正是为了解决这一痛点而诞生的。你可以把它理解为一个专门为某个项目打造的、与世隔绝的“沙盒”。为项目创建独立的虚拟环境,可以让该项目拥有专属的 Python 解释器副本和第三方依赖包,从而实现不同项目之间的环境隔离,互不干扰。

在现代开发中,我们可以极其方便地通过 VS Code 为项目创建虚拟环境,具体步骤如下:

  1. 新建并打开项目文件夹:在电脑中新建一个文件夹作为你的工程目录(例如命名为 my_first_project),并使用 VS Code 打开它。最简单的操作方式是:在 VS Code 中点击“文件” -> “打开文件夹”,或者直接将新建好的文件夹拖拽到 VS Code 窗口中。

    通过 VS Code 的文件菜单打开文件夹

    通过 VS Code 的文件菜单打开文件夹

    在文件资源管理器中用 VS Code 打开文件夹

    在文件资源管理器中用 VS Code 打开文件夹

  2. 唤出命令面板:在 VS Code 中,通过快捷键 Ctrl+Shift+P 打开顶部的“命令面板”(Command Palette)。

  3. 启动创建向导:在输入框中键入 Python: Create Environment(或输入中文 Python: 创建环境),并在自动弹出的下拉菜单中选中该指令。

    使用创建环境命令

    使用创建环境命令

  4. 选择环境类型:此时系统会提供两种主流的虚拟环境生成器供选择——VenvCondaVenv 是 Python 原生自带的轻量级模块,而 Conda 偏向于重量级的系统管理。在本教程所有要使用虚拟环境的数场景中,我们选择 Venv 即可。

    可供选择的环境

    可供选择的环境

  5. 指定底层解释器:接下来,VS Code 会列出你电脑上已安装的所有 Python 版本(即我们在上一节通过 PyManager 获取的版本)。根据当前项目的代码要求,选择一个合适的解释器路径作为该沙盒的“底层引擎”。

  6. 验证环境激活:稍等片刻,VS Code 会自动在你的项目文件夹下生成一个名为 .venv 的文件夹,这就是你的专属沙盒。此时,在 VS Code 中通过顶部的“终端”菜单新建一个终端(或使用快捷键 Ctrl+`),你会发现在终端命令行提示符的最前面多出了一个 (.venv) 标识。这标志着虚拟环境已经成功创建并激活。

    具有 Venv 虚拟环境的项目

    具有 Venv 虚拟环境的项目

此后,你在该终端内运行的所有 Python 脚本,以及安装的所有科学计算库,都将被安全地限制在这个 .venv 文件夹内,再也不会污染你的全局系统环境。

本教程的 Python 项目都很简单,通常不需要创建虚拟环境。

搭建 Python 开发环境基础语法