写在前面当你打开这部教程，我想你可能已经意识到 Python 编程语言的重要性，或者你正在考虑学习一门新的编程语言，而 Python 也是你最优先考虑的选择之一。不管你的初衷是什么，这部教程将帮助你掌握 Python 的基础知识，深入学习 Python 的高级特性，以及了解 Python 在不同领域的应用。Python 是一门易于学习的编程语言，它具有简洁的语法和丰富的标准库和第三方库，使得 Python 可以应用于 Web 开发、数据科学、机器学习等多个领域。同时，Python 还是一门开源的编程语言，拥有庞大的社区支持和丰富的学习资源。在这部教程中，你将学习到 Python 的基础语法，包括数据类型、条件语句、循环语句、函数等；同时，你还将学习到 Python 的高级特性，包括面向对象编程、模块和包的使用、错误处理和调试技巧等。最后，你还将学习到 Python 在不同领域的应用，包括 Web 开发、数据科学和机器学习。本教程的章节安排按照循序渐进的方式设计，让你可以逐步掌握 Python 的基础知识，并深入学习 Python 的高级特性和实际应用。每个章节末尾都会提供练习题和实际项目，帮助你巩固所学知识，提高编程能力。Python 是一门优秀的编程语言，我相信你将会喜欢上 Python 编程，享受编程带来的乐趣。无论你是编程新手还是有一定编程经验的开发者，这本书都将帮助你掌握 Python 编程的技能，迈向编程世界的更高峰。祝你在本书的学习过程中有愉快的体验！Python简介 Python LogoPython最初由 Guido van Rossum 于1989年在荷兰设计开发，其目的是作为一种易于学习的语言。Guido van Rossum 在设计 Python 时，受到了 ABC 语言和 Modula-3 语言的影响。Python 最初在1991年发布，其名称来自于 BBC电视剧 Monty Python's Flying Circus。注意：Python 语言的早期版本包括 Python 1.0，Python 2.0，Python 2.7 等。Python 2.7 是 Python 2.x 系列的最后一个版本，于2020年1月1日正式停止维护。（截至本教程编写的2022年）Python 3.x 系列是 Python 语言的最新版本。本教程中所有示例代码基于 Python 3.x 版本，Python3 不向下兼容 Python2。那么，与其他编程语言相比，Python 有哪些优点？使用优雅的语法，易于使用对于编程的初学者，相比于其他语言，Python 的入门相对容易。一方面，使用Python编写的程序更易于阅读，Python的哲学是清晰、简洁、可维护，在社区中形成了 Pythonic 这种代码风格，即 Beautiful is better than ugly （优美胜于丑陋）Explicit is better than implicit （一目了然胜于晦涩难懂）Simple is better than complex （简单明确胜于纷繁复杂）Complex is better than complicated （纷繁复杂胜于盘根错节）Flat is better than nested （扁平胜于嵌套）Sparse is better than dense （稀疏胜于紧凑）Readability counts （可读性很重要）节选自 https://peps.python.org/pep-0020/另一方面，Python 是一种解释型语言，开发过程中没有编译链接的环节，让你可以轻松的运行程序。对于初学者来说，这在一定程度上节省了时间，可以让你更关注与代码本身，而非额外的繁琐操作。自由且免费，可在任何地方运行Python 是自由且免费的软件（free software in two senses），你不需要支付任何费用，Python 可以在包括 Mac OS X 、Windows 、Linux 和 Unix （非官方版本也可用于 Android 和 iOS）上运行。附带一个大型标准库，不必重复造轮子Python 提供了完善的标准模块，覆盖了网络、文件、GUI、数据库、文本等大量内容，支持许多常见的编程任务，足以胜任各类应用场景。除了内置的库外，Python 也是“可扩展的”，活跃的社区提供了丰富的第三方库，你可以很方便地在代码中引入这些包。谁适合阅读本教程？本教程将介绍 Python 的基础用法和主要特性，适合 Python 的初级开发者阅读。读完之后，你将能够阅读和编写基本的 Python 程序。学习本教程前你需要了解具备基础数学和计算机基础知识在本教程的下一节，我们将介绍如何安装 Python 并配置编程环境，以及如何运行第一个 Python 程序。
本节将介绍如何在你的计算机上安装 Python 解释器。进行任何的 Python 程序设计都需要安装 Python 解释器，Python 解释器被用来读取 Python 程序，解析并执行程序指令。安装 Python在开始其他知识点的学习之前，请确保你的计算机上安装了 Python 解释器。对于不同的操作系统，安装 Python 的方式稍有不同。Python 可以在 Windows、macOS、Linux 等操作系统上运行，你可以从 Python 官网下载最新版本的Python。此外，Python还可以通过 Anaconda、Miniconda 等发行版来安装，这些发行版包含了 Python 以及其他常用的科学计算库和工具。Windows 安装 Python对于 Windows 用户，可以在 Python 官网的 Python for Windows 页面获取 Python 安装文件的下载链接。建议在 Stable Releases 找到最新的稳定版本，点击 Download Windows installer 下载exe安装文件。Mac 安装 Python对于 Mac 用户，可以在 Python 官网的 Python for macOS 页面获取 Python 安装文件的下载链接。建议在 Stable Releases 找到最新的稳定版本，点击 Download macOS installer 下载pkg安装文件。Linux 安装 Python对于 Red Hat、CentOS 或 Fedora 用户，可以通过 yum 安装 python3 软件包。sudo yum install python3对于 Debian 或 Ubuntu 用户，可以通过 apt 安装 python3 软件包。sudo apt-get install python3查看 Python 版本完成 Python 的安装后，可以在命令行中通过以下命令来查看当前的 Python 版本：python3 --version如果返回结果显示结果为类似以下的版本号，则表示 Python 被正确安装。Python 3.X.X 配置开发环境Python 可以通过命令行运行，但更多情况下我们需要一个更为友好的开发环境，以便更好地编写、调试和测试 Python 代码。下面是一些常用的 Python 开发环境：PyCharm：一个功能强大的Python集成开发环境（IDE），提供了许多有用的功能，包括代码自动补全、调试器、测试工具等。Visual Studio Code：一个轻量级的编辑器，可用于Python编程以及其他编程语言的开发。它还可以通过扩展来支持Python开发，提供了许多有用的功能，包括代码自动补全、调试器、测试工具等。Jupyter Notebook：一种Web应用程序，可用于创建和共享文档，其中包含代码、图表和文本说明。它是数据科学家和研究人员广泛使用的工具，因为它可以轻松地编写、可视化和共享Python代码和分析结果。第一个 Python 程序安装完 Python 和相关的编程环境之后，我们可以开始编写并运行第一个 Python 程序了。在本例中，我们将编写一个简单的 helloworld 程序，它将输出一个字符串 "Hello, World!" 到控制台。print("Hello, World!")将上述代码保存为一个 .py 文件，例如 helloworld.py，并在命令行中运行：在命令行下，通过以下命令运行刚刚编写的 Python 程序。python3 helloworld.py如果一切正常，你将在控制台上看到以下输出：Hello, World!在下一节中，我们将介绍Python的基本数据类型和操作。
如下表所示，在 Python 中，有许多不同的数据类型，每种类型都有其特定的属性和操作。在本节中，我们将介绍 Python 中最常见的几种内置数据类型，并简单演示它们的基本使用。 类别 数据类型 数值类型 int, float, complex 序列类型 list, tuple, range 文本类型 str 映射类型 dict 集合类型 set, frozenset 布尔类型 bool 二进制类型 bytes, bytearray, memoryview 空类型 NoneType 在未来几个小节中，我们还将依次对各个数据类型进行详细的讲解。数值类型Python 中的主要数值类型有整数、浮点数和复数。这些类型支持基本的算术操作，如加、减、乘、除和取模运算，以及比较运算符（如大于、小于和等于）。下面是一些示例：整数# 整数 x = 10 y = 5 print(x + y) # 输出 15 print(x - y) # 输出 5 print(x * y) # 输出 50 print(x / y) # 输出 2.0 print(x % y) # 输出 0浮点数# 浮点数 a = 3.14 b = 2.0 print(a + b) # 输出 5.14 print(a - b) # 输出 1.14 print(a * b) # 输出 6.28 print(a / b) # 输出 1.57 print(a % b) # 输出 1.14复数# 复数 c = 2 + 3j d = 1 + 2j print(c + d) # 输出 (3+5j) print(c - d) # 输出 (1+1j) print(c * d) # 输出 (-4+7j) print(c / d) # 输出 (1.6-0.2j)布尔类型布尔类型在 Python 中表示 True 和 False 两个值。布尔类型通常用于条件语句和循环语句中，例如 if 语句和 while 语句。布尔类型支持基本的逻辑运算符，如与、或和非运算。下面是一些示例：# 布尔类型和逻辑运算符 a = True b = False print(a and b) # 输出 False print(a or b) # 输出 True print(not a) # 输出 False字符串类型字符串是 Python 中的一种基本数据类型，用于表示文本。可以使用单引号或双引号来表示字符串。字符串支持基本的操作，如拼接、重复、索引和切片。下面是一些示例：# 字符串拼接 a = "Hello" b = "World" c = a + " " + b print(c) # 输出 "Hello World" # 字符串重复 d = "ha" * 3 print(d) # 输出 "hahaha" # 字符串索引和切片 e = "Python" print(e[0]) # 输出 "P" print(e[-1]) # 输出 "n" print(e[0:2]) # 输出 "Py" print(e[2:]) # 输出 "thon" print(e[:3]) # 输出 "Pyt" print(e[1:-1]) # 输出 "ytho"列表类型列表是 Python 中的一种常见数据类型，用于存储一组有序的值。可以使用方括号来表示列表，并使用逗号分隔值。列表支持基本的操作，如索引、切片、添加、删除和修改元素。下面是一些示例：# 列表基本操作 a = [1, 2, 3, 4, 5] print(a[0]) # 输出 1 print(a[-1]) # 输出 5 print(a[0:2]) # 输出 [1, 2] print(a[2:]) # 输出 [3, 4, 5] print(a[:3]) # 输出 [1, 2, 3] a.append(6) # 添加元素 print(a) # 输出 [1, 2, 3, 4, 5, 6] a.remove(2) # 删除元素 print(a) # 输出 [1, 3, 4, 5, 6] a[0] = 0 # 修改元素 print(a) # 输出 [0, 3, 4, 5, 6]元组类型元组是 Python 中的另一种常见数据类型，类似于列表，但元组的值不可修改。可以使用圆括号来表示元组，并使用逗号分隔值。元组支持基本的操作，如索引和切片。下面是一些示例：# 元组基本操作 a = (1, 2, 3, 4, 5) print(a[0]) # 输出 1 print(a[-1]) # 输出 5 print(a[0:2]) # 输出 (1, 2) print(a[2:]) # 输出 (3, 4, 5) print(a[:3]) # 输出 (1, 2, 3)字典类型字典是 Python 中的一种数据类型，用于存储一组键值对。可以使用大括号来表示字典，并使用冒号分隔键和值，使用逗号分隔键值对。字典支持基本的操作，如添加、删除和修改元素。下面是一些示例：# 字典基本操作 a = {"name": "John", "age": 30, "city": "New York"} print(a["name"]) # 输出 "John" print(a.get("age")) # 输出 30 a["age"] = 35 # 修改元素 print(a) # 输出 {"name": "John", "age": 35, "city": "New York"} a["country"] = "USA" # 添加元素 print(a) # 输出 {"name": "John", "age": 35, "city": "New York", "country": "USA"} del a["city"] # 删除元素 print(a) 集合类型集合是 Python 中的一种数据类型，用于存储一组无序的、唯一的值。可以使用大括号来表示集合，使用逗号分隔值。集合支持基本的操作，如添加、删除和交、并、差集等操作。下面是一些示例：# 集合基本操作 a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a) # 输出 {1, 2, 3, 4, 5} a.add(6) # 添加元素 print(a) # 输出 {1, 2, 3, 4, 5, 6} a.remove(1) # 删除元素 print(a) # 输出 {2, 3, 4, 5, 6} print(a.union(b)) # 输出 {2, 3, 4, 5, 6, 7, 8} print(a.intersection(b)) # 输出 {4, 5} print(a.difference(b)) # 输出 {2, 3, 6}未来几个小节中，我们将分别详细介绍各个数据类型的用法。
在本节中，我们将具体介绍 Python 中的数值类型，包括整数（int）、浮点数（float）和复数（complex），以及数值类型的常见使用方法。整数在 Python 中，整数是一种不带小数部分的数值类型，它可以表示正整数、负整数和零。整数的表示方法与数学中的表示方法一样，例如，我们可以使用下面的代码定义一个整数变量：x = 10 y = -5 z = 0在Python中，整数可以使用算数运算符进行基本的算术操作，例如加法（+）、减法（-）、乘法（*）、除法（/）、取模运算（%）、幂运算（**）、向下取整除法（//）。下面是一些示例：a = 10 b = 3 print(a + b) # 13 print(a - b) # 7 print(a * b) # 30 print(a / b) # 3.3333333333333335 print(a % b) # 1 print(a ** b) # 1000 print(a // b) # 3注意：在 Python2.X 或者之前的版本中，除法运算（/）对于整数会使用向下取整除法，对于浮点数会使用精确除法（即保留小数）。而在 Python3.X 中，无论对于整数还是浮点数，除法运算（/）都将使用精确除法进行运算，即最终的计算结果都会保留小数部分。整数还可以使用比较运算符进行比较，如等于（==）、不等于（!=）、小于（<）、小于等于（<=）、大于（>）和大于等于（>=）。下面是一些示例：print(a == b) # False print(a != b) # True print(a > b) # True print(a <= b) # False浮点数在 Python 中，浮点数是一种带有小数部分的数值类型。可以使用普通的算数运算符和比较运算符进行基本的数学运算和比较。例如：a = 3.14 b = 1.23456789 print(a + b) # 4.37456789 print(a - b) # 1.90543211 print(a * b) # 3.8857974046 print(a / b) # 2.5426222969522697 print(a == b) # False print(a != b) # True print(a > b) # True print(a <= b) # False需要注意的是，由于浮点数在计算机中的存储方式，可能会导致精度问题。复数在 Python 中，复数是一种由实部和虚部组成的数值类型。实部和虚部都可以是整数或浮点数，虚部需要使用后缀 j 或 J 来表示。复数可以表示为 a + bj 的形式，其中 a 表示实数部分，b 表示虚数部分。复数可以使用算数运算符和比较运算符进行基本的数学运算和比较。例如：a = 2 + 3j b = 4 - 5j print(a + b) # (6-2j) print(a - b) # (-2+8j) print(a * b) # (23-2j) print(a / b) # (-0.4117647058823529+0.6470588235294118j) print(a == b) # False print(a != b) # True复数对象有 real 和 imag 属性，其中 real 表示实数部分，imag 表示虚数部分。例如：print(a.real) # 2.0 print(a.imag) # 3.0
Python 中的字符串是一种不可变的序列类型，用于表示文本数据。字符串可以包含单个字符、数字、符号和文本。在 Python 中，字符串可以使用单引号（'）或双引号（"）来定义，两者是等效的。例如：my_string = 'Hello, world!'Python 中的字符串是序列类型，可以进行索引和切片操作。索引用于获取字符串中单个字符的值，切片用于获取子字符串。索引和切片的语法如下：# 获取字符串中第一个字符的值 print(my_string[0]) # Output: 'H' # 获取字符串中从第3个到第7个字符的子串 print(my_string[2:7]) # Output: 'llo, ' # 获取字符串中从第6个字符到末尾的子串 print(my_string[5:]) # Output: ', world!'字符串还可以使用加号（+）进行拼接，使用星号（*）进行重复。例如：# 字符串拼接 string1 = 'Hello,' string2 = ' world!' print(string1 + string2) # Output: 'Hello, world!' # 字符串重复 print('Hello, ' * 3) # Output: 'Hello, Hello, Hello, '在 Python 中，字符串还有一些常见的内置方法，可以进行查找、替换、大小写转换等操作。例如：# 查找字符串中某个子串的位置 my_string = 'Hello, world!' print(my_string.find('world')) # Output: 7 # 替换字符串中的子串 print(my_string.replace('world', 'Python')) # Output: 'Hello, Python!' # 将字符串中的所有字符转换为大写 print(my_string.upper()) # Output: 'HELLO, WORLD!'Python 还提供了一些格式化字符串的方式，用于将变量的值插入到字符串中。其中，使用格式化字符串字面值（ f-string ）是最常用的方式。例如：name = 'Bob' age = 30 print(f'My name is {name} and I am {age} years old.') # Output: 'My name is Bob and I am 30 years old.'上述代码中的字符串前缀为 f ，后面用大括号{}表示需要插入变量的位置，其中大括号中可以包含变量名、属性名、函数调用等 Python 表达式。在运行时， Python 会将大括号中的表达式求值，并将结果插入到字符串中。Python 中的字符串是一个非常强大的工具，可以用于表示文本数据、进行字符串处理和格式化等。在掌握字符串的基本用法后，还需要结合实际问题灵活应用字符串相关的操作和方法。
Python 条件语句是通过一条或多条语句的执行结果（True或者False）来决定执行的代码块。Python中的条件语句有三种类型：if 语句，elif 语句和 else 语句。下面是一个示例：# 条件语句 x = 5 if x > 0: print("x is positive") elif x == 0: print("x is zero") else: print("x is negative")下面将详细介绍这三种语句的用法：if 语句if 语句用于在满足特定条件时执行代码块。如果条件为 True ，则执行 if 语句中的代码块；否则，代码块将被跳过。if 语句的语法如下：if condition: statement(s)其中，condition 是要检查的条件，statement(s) 是在条件为True时要执行的代码块。注意，代码块必须使用相同的缩进级别。例如，下面的代码使用 if 语句来检查变量x的值是否大于0，并在满足条件时输出一条消息：x = 10 if x > 0: print("x is positive")elif 语句elif 语句用于在 if 语句中添加多个条件。如果 if 语句中的条件为 False，则会检查下一个 elif 语句的条件，以此类推。如果所有条件都为 False，则执行 else 语句中的代码块。elif 语句的语法如下：if condition1: statement1(s) elif condition2: statement2(s) else: statement3(s)例如，下面的代码使用 elif 语句来检查变量 x 的值是否为正数、负数或零，并根据结果输出不同的消息：x = -5 if x > 0: print("x is positive") elif x < 0: print("x is negative") else: print("x is zero")else 语句else 语句用于在 if 语句中处理所有未满足条件的情况。如果所有条件都为 False，则会执行 else 语句中的代码块。else 语句的语法如下：if condition: statement(s) else: statement(s)例如，下面的代码使用 else 语句来检查变量 x 的值是否大于0，并在满足条件时输出一条消息，否则输出另一条消息：x = -5 if x > 0: print("x is positive") else: print("x is not positive")以上是 Python 中条件语句的用法和示例。在下一节中，我们将介绍 Python 的循环语句。
函数是一段可重用的代码块，可以接受参数并返回值。Python 中的函数使用 def 关键字来定义。下面是一个示例：# 函数 def add(a, b): return a + b result = add(1, 2) print(result) # 输出 3函数可以接收输入参数和返回输出结果，让我们可以把复杂的问题分解成小的任务单元，提高代码的可维护性和重用性。下面将详细介绍 Python 函数的用法和示例：函数定义在 Python 中，函数的定义以关键字 def 开始，后跟函数名和参数列表。函数体是函数的主要代码块，它包含在缩进块中。函数的语法如下：def function_name(parameters): statement(s)其中， function_name 是函数的名称， parameters 是可选的参数列表，用于传递值给函数； statement(s) 是要执行的代码块。在函数定义的代码块中，可以使用 return 语句来返回值。例如，下面的代码定义了一个函数，用于计算两个数字的和：def add(x, y): return x + y函数调用在 Python 中，可以使用函数名来调用函数，并向函数传递参数。函数调用的基本语法如下：result = function_name(arguments)其中， result 是函数返回的结果， function_name 是要调用的函数的名称， arguments 是要传递给函数的参数。例如，下面的代码调用了 add 函数，计算了两个数的和：result = add(3, 4) print(result) # 输出7默认参数在 Python 中，可以使用默认参数来定义函数。默认参数是指在函数定义中预先定义的参数值。如果函数调用时没有提供参数，则将使用默认值。例如，下面的代码定义了一个带有默认参数的函数：def multiply(x, y=2): return x * y在这个函数中，如果只提供一个参数，则第二个参数将使用默认值2。例如，下面的代码调用了 multiply 函数，计算了两个数的积：result = multiply(3, 4) print(result) # 输出12 result = multiply(3) print(result) # 输出6，因为第二个参数使用了默认值2以上是第一部分的内容，读者已经学习了 Python 的基本数据类型、控制流语句和函数。在第二部分中，我们将更深入地学习 Python 的高级特性，例如面向对象编程、异常处理、文件处理和模块化编程。
在第一部分中，我们学习了 Python 的基本语法、数据类型、控制流语句以及函数。在第二部分中，我们将更深入地学习 Python 的高级特性，例如面向对象编程、异常处理、文件处理和模块化编程。面向对象编程（Object-Oriented Programming，简称OOP）是一种编程范式，将数据和行为封装在对象中。Python 是一种支持面向对象编程的语言，它可以使用类（class）来创建对象。当我们需要处理某些具有相同属性和方法的对象时，类和对象就成为了一个重要的解决方案。类是一种用户自定义的数据类型，它包含了一些方法和属性的定义，用来描述对象的特征和行为。而对象则是类的实例化，它是由类创建的具有特定属性和方法的实体。类的定义在 Python 中，可以使用 class 关键字来定义一个类，如下所示：class Person: # 类属性 species = 'human' # 构造函数 def __init__(self, name, age): # 实例属性 self.name = name self.age = age # 实例方法 def say_hello(self): print(f'Hello, my name is {self.name}, and I am {self.age} years old.') 在这个代码中，我们定义了一个名为 Person 的类，它包含一个类属性 species ，一个构造函数 init 和两个方法 say_hello 和 set_species 。构造函数 init 用于创建实例对象，并初始化实例属性。实例方法 say_hello 用于打印一条问候语，并使用到实例属性 self.name 和 self.age 。创建对象在 Python 中，可以使用类来创建对象。在创建对象时，会自动调用类的构造函数，如下所示：p1 = Person('Alice', 25) p2 = Person('Bob', 30) p1.say_hello() # 输出Hello, my name is Alice, and I am 25 years old. p2.say_hello() # 输出Hello, my name is Bob, and I am 30 years old.在上面的代码中，我们分别使用类 Person 了两个对象 p1 和 p2 ，并分别调用了它们的实例方法 say_hello 。访问属性在 Python 中，对象的属性可以通过点运算符来访问，如下所示：print(p1.name) # 输出Alice print(p2.age) # 输出30在上面的代码中，我们分别访问了对象 p1 和 p2 的属性 name 和 age ，并将它们打印出来。继承在 Python 中，类可以继承其他类的属性和方法。被继承的类被称为父类或基类，继承它的类被称为子类或派生类。子类可以覆盖父类的方法，并添加自己的属性和方法。例如，下面的代码定义了一个子类 Student ，它继承了父类 Person 的属性和方法，并添加了自己的属性和方法：class Student(Person): def __init__(self, name, age, major): super().__init__(name, age) self.major = major def say_hello(self): print(f"Hello, my name is {self.name}, and I am {self.age} years old. My major is {self.major}.") s1 = Student('Charlie', 20, 'Computer Science') s2 = Student('David', 22, 'Mathematics') s1.say_hello() # 输出Hello, my name is Charlie, and I am 20 years old. My major is Computer Science. print(s2.species) # 输出human print(s2.major) # 输出Mathematics在这个例子中，我们定义了一个子类 Student ，它继承了 Person 类。子类 Student 有一个新的属性 major ，表示学生的专业。在子类中，我们重写了父类的实例方法 say_hello ，添加了一个新的输出信息 —— 学生的专业。在子类 Student 的构造函数中，我们调用了父类 Person 的构造函数，以初始化父类的属性 name 和 age 。这是通过调用 super().init(name, age) 来实现的。在定义好 Student 类后，我们使用它创建了两个 Student 对象 s1 和 s2 ，并使用它们的实例方法 say_hello 来打印输出。我们还访问了对象s2的属性 species 和 major ，其中属性 species 是从父类 Person 继承而来的。以上就是 Python 中类和对象的基本用法，它们是面向对象编程的基石，可以使我们更方便地组织和管理代码，提高代码的可维护性和重用性。在下一节中，我们将介绍 Python ....