第一个 Python 程序
欢迎进入编程世界!
这是编程语言书籍的一个传统,第一句话永远是上面这句问候。而第一个编写的程序就是打印出“Hello, World!”这句话。我们也沿用这一传统,从 Hello World 开始。
实现这一功能只需要运行以下的语句:
print("Hello, World!")
使用在线编辑环境
使用在线编辑环境非常简单,不需要任何额外工作。打开在线编辑环境页面,输入上面那行代码并运行即可。比如:https://qizhen.xyz/pyodide 或 https://qizhen.xyz/brython。
直接在 Python 解释器中运行
如果不使用任何 IDE,可以打开计算机的命令行终端,然后输入 python(在 macOS 或 Linux 上通常需要输入 python3)并回车,系统会启动 Python 解释器。读者现在应该看到 >>> 这样的提示符,表示 Python 解释器已经准备好接受命令了。
在 >>> 提示符后,输入以下代码:
print("Hello, World!")
然后回车。
读者应该看到输出为:
Hello, World!
恭喜!你刚刚编写并运行了你的第一个 Python 程序。
使用集成开发环境(IDE)
如果使用前文介绍的任何一种集成开发环境编写程序,通常都需要先创建一个文件来保存程序。将下面这行代码复制到新建的文件中:
print("Hello, World!")
然后将其保存为以 .py 为后缀的文件(例如 hello.py)。再点击 IDE 上的运行按钮,就可以运行程序了。
运行一个 .py 文件
对于已保存的 .py 文件,我们既可以在 IDE 中打开并运行,也可以在命令行终端中运行。例如,假设我们有一个名为 welcome.py 的文件,其内容如下:
name = input("你叫什么名字?")
print(f"你好,{name}!欢迎来到 Python 的编程世界!")
打开命令行或终端,导航到 welcome.py 文件所在的目录。输入以下命令并回车:
python welcome.py
当程序提示输入名字时,输入你的名字并回车。
现在应该看到一个类似 你好,ruanqizhen!欢迎来到 Python 的编程世界! 的消息了。
Python 的语法
编程语言的语法是一套规则和约定,用于定义如何书写和组织代码,使计算机能够理解和执行。就像自然语言的语法规定了如何构造句子一样,编程语言的语法也规定了如何构造程序中的各种元素。
Python 以其简洁明了的语法而著称。我们下面简要介绍一下 Python 的语法,主要是方便已有其它编程语言经验的读者快速熟悉 Python 的特点。对于没有经验的读者,如果觉得介绍得太过笼统也不要紧,后文还会对它们进行详细解析。
和大多数主流编程语言一样,Python 由一行一行的“语句”组成。比如下面的程序:
print("Hello, World!")
在这行语句中,print 是一个函数名。如果读者没有接触过其他编程语言,可以把这里的函数想象成类似数学中的函数:在函数名后面的括号中传入数据,函数就会输出或产生相应的结果。在这里,输入的数据是一串字符“Hello, World!”。Python 语言中,双引号中间的内容表示字符串。print 的运行结果是把输入的字符串打印在屏幕上。
如果运行:
print(1+2)
此时 print 函数括号内不再是字符串,而是一个数值运算表达式。Python 会先计算该表达式的值(即 3),然后再打印出结果 3。
如果程序有多行代码,比如:
name = input("你叫什么名字? ")
print(f"你好,{name}!欢迎来到 Python 的编程世界!")
那么程序一般会按照从上到下的顺序逐句运行。在上面的示例中,input 也是一个函数,它的主要作用是暂停程序运行,等待用户输入。括号里的文字是提示符,会先显示在屏幕上告诉用户该输入什么。name 是一个变量,用于保存 input 函数返回的数据(即用户通过键盘输入的内容)。接下来的 print 函数会把字符串数据连同变量 name 中的内容一起打印在屏幕上。
程序语句通常由数据、变量、操作符、表达式等部分组成。下面我们简要解释一下这些部分以及一些其它常见编程术语的含义:
数据
数据(Data)是程序中存储和处理的基本信息。在上面的示例程序中,我们看到的数字 1、2,文本 "Hello, World!" 等,都是程序中的数据。Python 支持多种数据类型,用于存储不同类型的信息。最常见的几种数据类型包括:
- 数字类型:如整数 int 和浮点数 float。例如:
42,3.14 - 字符串类型:用引号括起来的字符序列,例如:
"Hello, World!" - 布尔类型:表示逻辑值
True和False,用于条件判断。 - 列表、字典等集合数据:用来存储多个数据项的集合,例如列表(
list)可以包含多个元素[1, 2, 3],字典(dict)使用键值对存储数据{"name": "Alice", "age": 30}。
关于数据,我们将在数据与变量一节做详细介绍。
变量
变量(Variable)是用来保存数据的命名空间,可以将数据赋值给变量,通过变量来操作数据。在 Python 中,变量的定义不需要声明类型,可以直接用等号赋值。例如:
age = 25 # 整数类型
name = "Alice" # 字符串类型
is_student = True # 布尔类型
上面每一行代码中,等号左边的文字是变量名,它可以包含字母、数字和下划线,不能以数字开头;等号右边是变量的数据。在数据与变量一节,我们将对变量进行详细的讨论。
操作符
操作符(Operator)是用于操作数据和变量的符号,比如,用于数学计算的加减乘除(+ - * /)等操作符。Python 中还有用于处理其他类型数据的操作符,我们将在基础数学运算一节详细介绍这些操作符。
关键字
在编程语言中,关键字(Keyword)是指被该语言赋予了特殊意义的词汇,用于定义语法和结构规则。关键字是编程语言的一部分,被预先定义在语言的规范中,我们在编程时可以直接使用它们。由于关键字具有特殊的意义,它们作为保留字,只能用于特定用途,不能再被用作变量名、函数名或其他标识符。如果把关键字用作普通的标识符,比如变量名,将会导致语法错误。
Python 中常用的关键字包括 if, else, for 等。运行下面的代码可以打印出 Python 中所有的关键字:
import keyword
print(keyword.kwlist)
我们将在后续章节分别对这些关键字做详细介绍。
标识符
标识符(Identifier)是用于命名变量、函数、类或其他用户定义对象的名称。标识符是程序中可用来标记和引用对象的唯一名称。
标识符的定义必须遵循以下规则:
- 由字母(a-z、A-Z 或其他语言的字符)、数字(0-9)和下划线(_)组成。
- 首字符必须是字母或下划线,不能是数字。
- 不能与 Python 的关键字冲突。
- 不允许特殊符号,比如空格、@、$、% 等。
比如,一些合法的标识符:my_variable、_privateVar、var1、Σ_value;
下面这些是非法标识符:1variable、var-name、me@qq.com、def、my var。
标识符可以包含 unicode 字符。Unicode 是一套覆盖了全世界所有的字符的字符集。这使得标识符可以使用任何语言(如中文、希腊文等)。我们可以利用这一点,使用中文来编写 Python 程序,比如这个示例程序。
Python 标识符是大小写敏感的(比如大写的 A 与小写的 a 代表不同的标识符),但是对于等效的 Unicode 字符(比如对应的半角和全角字母),Python 会认为它们是相同的标识符。Unicode 中等效字符的定义相当复杂,大多数人并不能记住所有的等效字符。使用中文命名标识符对于不熟悉英语的开发者是个优势 ,但是由于 Unicode 中存在等效字符,且字符集中存在着大量外观极其相似但编码不同的字符,这可能导致程序变得难以理解和调试。所以,还是应当尽量只使用英文字母作为标识符。下面示例只用来展示一些合法的标识符,但不推荐这样使用:
变量 = 42
print(变量) # 使用中文字符作为变量名
print("全角字母") # 全角英文字符组成的函数名,相当于 print() ,全角字母与半角 字母等价
fi = 1
print(fi) # fi 与 fi 和 fi 是同一个标识符
xⁿ = 1
print(xn) # xⁿ 与 xn 是同一个标识符
var = 1
print(Var) # 报错,因为 var 和 Var 是两个不同的标识符。
表达式
表达式(Expression)是计算机科学中的一个术语,指一个可以计算出一个值的代码单元。它是由数据、变量和操作符组成的序列,总是产生或返回一个结果值。表达式可以非常简单,如单独一个数字、变量;或者更复杂,如整个数学公式或者函数调用等。
比如下面是一些表达式的例子:
3 + 4返回 7"Hello" + " " + "World"返回 "Hello World"my_function(2, 3)返回函数my_function的运行结果print("Hello World")返回None
有些函数看似没有返回结果,例如我们通常不会将 print() 的返回值赋值给任何变量(如 x = print(1))。但实际上,Python 中的所有函数都有返回值,如果没有显式指定,则默认返回 None。
在 Python 中,我们可以把表达式放在 任何需要一个值的地方,比如作为函数参数,作为 if 语句中的条件,作为其它表达式的一部分等。
表达式可以直接作为一行代码放在程序中。有些编辑环境在运行程序的时候,会把程序最后一行表达式的运算结果打印出来,以方便编程者查看。
语句
语句(Statement)是执行一个操作的完整命令。语句不像表达式那样返回值,它做的是指导程序去做某件事,例如声明一个变量、执行一个条件判断、执行一个循环等。比如:
x = 3 + 2赋值语句if x > 0条件控制语句
语句在 Python 中是一个完整的句子,它不能再成为其它语句或表达式的一部分了。
如果使用分号分隔每个语句,那么可以在一行代码中书写多个语句。其它一些编程语言也是这样的,但这样并不符合 Python 的编程规范。我们在编写程序的时候,每一行就应该只放置一条语句,以提高程序的清晰度和可读性。
注释
注释(Comment)用于对代码进行说明和解释,它不会影响程序的逻辑。注释通常是为了帮助更方便地阅读和理解程序。
Python 有两种方式添加注释:
- 单行注释:以
#开头。在一行中,所有字符#之后的内容都是注释 - 多行注释:Python 并没有专门的多行注释符号,但通常可以使用三个单引号
'''或三个双引号"""包裹的一段文本来作为多行注释。如果不将这些文本赋值给变量,Python 运行时会忽略它们。
上文介绍变量的示例程序中,就包含有注释:
age = 25 # 整数类型
"""
这也是一段注释
"""
代码块
代码块(code block)是指由多行代码组成的结构,这些代码被组织在一起,用于完成一个特定的功能或逻辑单元。代码块通常用于条件判断、循环、函数、类等结构中,以便将代码逻辑清晰地划分和组织。
在多数编程语言中,代码块的界限通常由特定的符号(比如花括号 {}、小括号 ())或特定的关键字(比如 begin 和 end)等定义。在 Python 中,代码块的定义方式比较特殊,它依赖缩进来表示代码的层级和逻辑关系。
代码缩进是编程中的一个常见概念,指的是某一行代码行的起始部分有一定数量的空白空间,空白后面才是真正的代码。在那些使用特定符号定义代码块的语言中,缩进只是为了美观并提高可读性,不会影响程序的逻辑。但在 Python 中,由于利用缩进定义代码块的特殊设定,不同的缩进会直接改变程序的逻辑。
Python 的这种设计决策旨在使代码更加可读,并鼓励程序员写出结构清晰、整洁的代码。在同一个代码块中,每一行代码的缩进必须是一致的。这意味着,如果使用了四个空格作为缩进,那么整个代码块中必须都使用四个空格。官方 Python 样式指南(PEP 8)推荐使用 4 个空格作为标准的缩进大小。
我们之前看到的示例程序的每一行代码之间,都仅有最简单的顺序逻辑关系,因此每个示例程序都只有一个代码块,还不用考虑缩进的问题。但之后的程序示例将会变得更加复杂,将会包含多个代码块了。
起初大家觉得缩进很容易出错,多一个或少一个空格都会导致问题。毕竟在其他语言中,缩进只影响美观而不影响逻辑,因而容易被忽视。不过,随着时间的推移,大家很快发现这种担心是多余的。在习惯了 Python 的代码分块方式后,缩进并没有导致更多错误,反而显著提升了代码的整洁度和可维护性。
下面,我们以 Python 中最主要的两种控制结构,以及函数为例,演示一下代码块的含义。