Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Python 官方教程总结

以 Python 3.12 为基础。

官方文档: https://docs.python.org/zh-cn/3.12/tutorial/index.html

以下是对官方文档的总结。

使用 Python 的解释器

Python 3.12 解释器的启动、使用和环境配置方法:

1. 启动 Python 解释器

  • Unix/Linux系统:通常安装在 /usr/local/bin/python3.12,可通过 python3.12 命令启动
  • Windows系统:可通过 Microsoft Store 安装的 python3.12 命令或 py 命令启动
  • 退出方式:使用 Ctrl+D(Unix)或 Ctrl+Z(Windows),或输入 quit()

2. 解释器工作模式

  • 交互模式:在终端中直接输入 Python 代码,主提示符为 >>>,连续行提示符为 ...
  • 脚本模式:执行文件中的 Python 代码
  • 命令行执行:使用 python -c command 执行单行命令
  • 模块执行:使用 python -m module 执行模块

3. 命令行参数处理

  • 参数存储在 sys.argv 列表中
  • 该列表最少有一个元素
  • 无参数:sys.argv[0] 是空字符串
  • 有参数:sys.argv[0] 脚本名,后续元素是传入的参数
  • 不同启动方式对 sys.argv[0] 的处理不同

4. 文件编码支持

  • 默认使用 UTF-8 编码,支持多种语言字符
  • 可通过特殊注释声明其他编码格式
  • 编码声明需放在文件第一行(shebang行除外)

5. 环境配置

  • 支持行编辑功能(基于 GNU Readline 库)
  • 可通过环境变量配置 Python 运行环境

Python 速览

介绍 Python 作为计算器的基本用法和核心概念:

1. Python 基础概念

  • 注释:以 # 开头,用于解释代码但不被执行
  • 交互式使用:区分输入( >>> 提示符)和输出(无提示符)

2. 数字运算

  • 基本运算:支持 +-*/ 等算术运算符
  • 数据类型:整数(int)和浮点数(float)
    • 除法运算 (/) 总是返回浮点数
    • Python 全面支持浮点数;混合类型运算数的运算会把整数转换为浮点数
  • 特殊运算// 整除、% 取余、** 幂运算
  • 变量赋值:使用 = 操作符
  • 交互式变量_ 变量保存上次计算结果
  • 分组:圆括号 ()

3. 字符串操作

  • 定义方式:单引号或双引号包围
  • 转义字符:使用 \ 处理特殊字符
  • 原始字符串r 前缀避免转义
  • 多行字符串:三重引号支持
  • 字符串操作:支持 + 连接、* 重复
  • 索引和切片[0] 访问单字符,[0:2] 获取子串
  • 不可变性:字符串内容不可修改

4. 列表操作

  • 定义:方括号 [] 包围,逗号分隔
  • 可变性:与字符串不同,列表内容可修改
  • 操作方法:支持索引、切片、追加(append)
  • 嵌套:可创建包含其他列表的列表
  • 赋值注意:简单赋值不复制数据,而是引用

5. 编程基础

  • 循环结构while 循环配合缩进组织代码
  • 多重赋值a, b = 0, 1 同时赋值多个变量
  • 输出函数print() 函数格式化输出
  • 缩进规则:Python 使用缩进表示代码块

控制流工具和函数定义

介绍 Python 的控制流语句和函数定义的高级特性

1. 控制流语句

  • if语句:支持 elif 和 else,可替代其他语言的 switch 语句
  • for语句:在序列元素上迭代,而非算术递增
  • range()函数:生成等差数列,支持起始值、步长参数
  • break和continue:分别用于跳出循环和跳到下次迭代
  • 循环的else子句:当循环正常结束(无break)时执行
  • pass语句:空操作,用作占位符

2. match语句

  • Python 3.10+ 的新特性
  • 类似模式匹配,比传统 switch 语句更强大
  • 支持字面值匹配、解包赋值、类模式匹配等
  • 可使用通配符和约束条件

3. 函数定义

  • 基本语法:使用 def 关键字定义
  • 文档字符串:函数首行的字符串作为文档
  • 返回值:使用 return 语句,无返回值时默认返回 None
  • 局部/全局作用域:函数内部变量不影响外部

4. 函数参数类型

  • 默认值参数:参数可设置默认值
  • 关键字参数:按参数名传递
  • 特殊参数类型
    • 仅限位置参数(/前)
    • 位置或关键字参数(/和*之间)
    • 仅限关键字参数(*后)
  • 可变参数*args 接收任意数量位置参数,**kwargs 接收关键字参数

5. 高级特性

  • 参数解包:使用 *** 操作符解包列表/字典参数
  • Lambda表达式:创建匿名函数
  • 函数注解:为参数和返回值添加类型信息
  • 文档字符串格式:遵循 PEP 257 约定

6. 编码风格建议

  • 遵循 PEP 8 风格指南
  • 使用 4 个空格缩进
  • 每行不超过 79 个字符
  • 合理使用空行分隔
  • 保持命名一致性

Python 数据结构

介绍 Python 的核心数据结构及其操作方法

1. 列表详解

  • 列表方法:包含 append、extend、insert、remove、pop、clear、index、count、sort、reverse、copy 等
  • 栈操作:使用 append()pop() 实现后进先出
  • 队列操作:推荐使用 collections.deque 实现先进先出
    • 导入:from collections import deque
    • 创建队列:queue = deque(["Eric", "John", "Michael"])
    • 进队列:queue.append("Terry")
    • 出队列:queue.popleft()Eric 先出,列表剩余 ["John", "Michael", "Terry"]
  • 列表推导式:简洁的列表创建方式,如 [x**2 for x in range(10)]
  • 嵌套列表推导式:支持复杂的多层嵌套操作

2. del 语句

  • 按索引删除列表元素
  • 支持删除切片或整个变量

3. 元组和序列

  • 元组:不可变序列,用逗号分隔值创建
  • 元组打包和解包:支持值的批量赋值
  • 与列表的区别:不可变、异质元素、通过索引或解包访问

4. 集合

  • 创建:用 花括号 或 set() 函数
    • 注意:创建 空集合 只能用 set(),不能用 {}{} 创建的是空字典
  • 特点:不重复元素的无序容器
  • 基本操作:成员检测、去重
  • 集合运算:支持合集(|)、交集(&)、差集(-)、对称差分(^)
  • 集合推导式:类似列表推导式

5. 字典

  • 键值对存储:以键索引的映射类型
  • 操作方法:添加、删除、查找键值对
  • 创建方式:花括号、dict() 构造函数、字典推导式
  • 键的限制:必须是不可变类型

6. 循环技巧

  • 字典循环:使用 items() 同时获取键值
  • enumerate():同时获取索引和值
  • zip():同时遍历多个序列
  • reversed():逆向循环
  • sorted():排序后循环

7. 条件控制

  • 比较运算符:in、not in、is、is not
  • 链式比较:如 a < b == c
  • 短路运算andor 运算符的短路特性
  • 海象运算符:= 用于表达式内赋值

8. 序列比较

  • 字典式顺序:逐元素比较
  • 类型比较:相同类型序列可比较,不同类型需适当方法

Python 模块和包

介绍 Python 的模块系统和包管理机制

1. 模块基础

  • 模块定义:包含 Python 定义和语句的文件,以 .py 为后缀
  • 导入方式
    • import module:导入整个模块
    • from module import function:导入特定函数
    • from module import *:导入所有公共名称
    • 使用as关键字进行别名导入
  • 模块命名空间:每个模块有独立的私有命名空间

2. 模块执行

  • 脚本模式:模块可作为脚本执行,__name__ 设为 "__main__"
  • 条件执行:使用 if __name__ == "__main__": 实现模块的双重用途

3. 模块搜索路径

  • 搜索顺序:内置模块 -> sys.path 中的目录
  • 路径组成:脚本目录、PYTHONPATH、标准库路径
  • 路径修改:可动态修改 sys.path

4. 编译文件

  • 缓存机制:Python 将编译版本缓存在 __pycache__ 目录
  • 文件命名module.version.pyc 格式
  • 优化选项:使用 -O 或 -OO 开关减少文件大小

5. 标准模块

  • 内置模块:如 sys,提供解释器接口
  • 库模块:Python 自带的标准库
  • 平台依赖:某些模块仅在特定平台上可用

6. dir() 函数

  • 功能:列出模块中定义的名称
  • 使用方式dir(module) 或无参数列出当前命名空间
  • 内置名称:标准模块 builtins 包含所有内置函数和变量

7. 包管理

  • 包结构:使用点号模块名构建命名空间层次
  • __init__.py:使目录成为包的必需文件
  • 子包导入:支持多级包结构的导入

8. 导入方式详解

  • 绝对导入:使用完整包路径
  • 相对导入:使用点号表示相对位置( . 当前包,.. 上级包)
  • 包导入:支持 __all__ 列表控制 * 导入的内容

9. 最佳实践

  • 避免使用 from package import *(除非明确定义__all__
  • 推荐使用绝对导入
  • 合理组织包结构以避免命名冲突

Python 输入输出操作

介绍 Python 中的输入输出操作,包括格式化输出和文件处理

1. 输出格式化

  • f-字符串:使用f前缀的格式化字符串,如 f'Results of the {year} {event}'
  • str.format()方法:使用 {} 标记替换位置,支持位置和关键字参数
  • 手动格式化:使用字符串方法如 rjust()ljust()center() 进行对齐
  • 旧式格式化:使用 % 运算符进行字符串插值
  • repr()和str()函数:用于将值转换为字符串表示

2. f-字符串详解

  • 在字符串前加 f 或 F 前缀
  • 支持格式说明符,如 {:.3f} 控制小数位数
  • 支持字段宽度设置,如 {:10} 用于列对齐
  • 支持转换修饰符:!a(ascii)、!s(str)、!r(repr)
  • = 说明符用于自说明型表达式

3. str.format() 方法

  • 位置参数:{0}{1}
  • 关键字参数:{name} 形式
  • 支持字典参数:使用 ** 操作符
  • 可组合使用位置和关键字参数

4. 文件操作

  • open()函数:基本语法 open(filename, mode, encoding)
  • 模式参数'r' 读取、'w' 写入、'a' 追加、'r+' 读写
  • 编码参数:推荐使用 encoding="utf-8"
  • 文本/二进制模式:文本模式自动处理换行符转换

5. with语句

  • 推荐使用 with 关键字管理文件
  • 自动处理文件关闭,即使发生异常
  • 简化代码结构

6. 文件对象方法

  • read():读取文件内容
  • readline():读取单行
  • write():写入内容
  • tell():获取当前位置
  • seek():改变文件位置
  • 支持迭代遍历文件行

7. JSON数据处理

  • json模块:用于序列化复杂数据结构
  • dumps()/dump():序列化对象为 JSON 字符串/文件
  • loads()/load():从 JSON 字符串/文件反序列化
  • 支持列表、字典等复杂数据类型
  • 与 pickle 模块对比:JSON 更安全但功能有限

Python 错误和异常处理

介绍 Python 的错误处理机制,包括语法错误和异常处理:

1. 错误类型

  • 语法错误:解析错误,最常见的错误类型
  • 异常:语法正确但执行时出错,如 ZeroDivisionError、NameError、TypeError 等

2. 异常处理

  • try-except语句:基本异常处理结构
  • 多except子句:可为不同异常指定不同处理程序
  • 异常匹配:支持基类和派生类的异常匹配
  • 异常参数:异常可携带相关参数信息
  • else子句:在没有异常时执行的代码块

3. 异常触发

  • raise语句:强制触发指定异常
  • 异常链:使用 from 子句显示异常的因果关系
  • 禁用异常链:使用 from None 禁用自动异常链

4. 用户自定义异常

  • 从 Exception 类派生自定义异常类
  • 通常以 “Error” 结尾命名
  • 保持简单,主要用于错误信息提取

5. 清理操作

  • finally子句:无论是否异常都执行的清理代码
  • with语句:预定义清理操作,自动处理资源释放
  • finally 子句中的 return 语句会覆盖 try 中的返回值

6. 多异常处理

  • ExceptionGroup:打包多个异常实例
  • except*语句:选择性处理异常组中的特定类型异常
  • 嵌套异常组:支持复杂的异常层次结构

7. 异常注释

  • add_note()方法:为异常添加额外信息
  • 注释按添加顺序显示在标准回溯中

8. 最佳实践

  • 尽可能具体地指定要处理的异常类型
  • 使用 Exception 作为通配符时要谨慎
  • 打印或记录异常后重新引发,允许调用者处理
  • 使用 with 语句管理资源自动清理

Python 类和面向对象编程

介绍 Python 的类机制和面向对象编程特性:

1. 类基础概念

  • 类定义:使用 class 关键字创建新对象类型
  • 实例化:类对象支持实例化操作,创建该类型的新实例
  • 初始化方法__init__() 方法用于实例的初始化和定制
  • 属性访问:支持数据属性和方法属性

2. 作用域和命名空间

  • 命名空间:从名称到对象的映射(如全局、局部命名空间)
  • 作用域规则:LEGB规则(局部->嵌套->全局->内置)
  • global和nonlocal:用于修改外层作用域变量
  • 类命名空间:类定义创建新的命名空间

3. 实例对象

  • 数据属性:实例的变量,无需声明,首次赋值时创建
  • 方法对象:绑定到实例的函数
  • self参数:方法的第一个参数代表实例本身
  • 实例vs类变量:实例变量为每个实例独有,类变量被所有实例共享

4. 继承机制

  • 单继承class Derived(Base): 语法
  • 多重继承class Derived(Base1, Base2, Base3): 语法
  • 方法重写:派生类可重写基类方法
  • 方法解析顺序:MRO(Method Resolution Order)处理多重继承
  • isinstance()和issubclass():类型检查函数

5. 私有变量

  • 命名约定:单下划线 _name 表示非公有API
  • 名称改写:双下划线 __name 触发名称改写机制
  • 实际私有性:Python中没有真正的私有变量,主要靠约定

6. 特殊功能

  • 数据类:使用 @dataclass 装饰器简化数据结构定义
  • 迭代器协议:实现 __iter__()__next__() 方法
  • 生成器:使用 yield 语句的简单迭代器创建方式
  • 生成器表达式:类似列表推导式的简洁语法

7. 高级特性

  • 方法调用:支持通过实例调用其他方法
  • 全局作用域:方法可访问包含模块的全局变量
  • 动态特性:运行时创建和修改类
  • 别名机制:多个名称可绑定到同一对象

8. 最佳实践

  • 使用实例变量而非类变量处理可变对象
  • 遵循命名约定避免意外冲突
  • 合理使用继承和组合
  • 注意方法解析顺序的复杂性

Python 标准库简介

介绍 Python 标准库中常用的重要模块和功能

1. 操作系统接口

  • os模块:提供与操作系统交互的函数(获取/更改工作目录、执行系统命令)
  • shutil模块:提供高级文件和目录管理功能(复制、移动文件)

2. 文件和参数处理

  • glob模块:使用通配符搜索文件
  • sys.argv:访问命令行参数
  • argparse模块:处理复杂的命令行参数

3. 输入输出和错误处理

  • sys.stdin/stdout/stderr:标准输入输出流,stderr 用于错误输出
  • sys.exit():终止程序

4. 字符串和模式匹配

  • re模块:正则表达式处理高级字符串操作
  • 字符串方法:简单操作的首选

5. 数学运算

  • math模块:访问数学函数(三角函数、对数等)
  • random模块:随机数生成和随机选择
  • statistics模块:基本统计计算(均值、中位数、方差)
  • SciPy项目:更多数值计算模块

6. 网络和互联网

  • urllib.request:从URL获取数据
  • smtplib:发送邮件

7. 日期时间处理

  • datetime模块:日期和时间操作,支持时区和日历运算

8. 数据压缩

  • zlib、gzip、bz2等:支持多种压缩格式

9. 性能测量

  • timeit模块:测量代码执行时间
  • profile/pstats模块:分析代码性能

10. 质量控制

  • doctest模块:从文档字符串中提取和运行测试
  • unittest模块:全面的单元测试框架

11. “自带电池"功能

  • xmlrpc模块:远程过程调用
  • email包:邮件处理
  • json/csv模块:数据格式处理
  • xml包:XML处理
  • sqlite3模块:数据库操作
  • 国际化模块:gettext、locale 等

Python 标准库第二部分

介绍 Python 标准库中更高级、专业化的模块:

1. 格式化输出

  • reprlib模块:提供定制化的 repr() 函数,用于缩略显示大型容器对象
  • pprint模块:提供复杂的打印控制,美化输出复杂数据结构
  • textwrap模块:格式化文本段落,适应指定宽度
  • locale模块:处理地域文化相关的数据格式化

2. 模板系统

  • string.Template类:提供简化的字符串替换语法
  • 支持 $ 占位符和安全替换机制
  • 可自定义分隔符,适用于用户自定义应用

3. 二进制数据处理

  • struct模块:提供 pack/unpack 函数处理二进制记录格式
  • 支持不同字节序和数据类型

4. 多线程编程

  • threading模块:支持后台任务执行
  • 提供多种同步原语(锁、事件、条件变量等)
  • 推荐使用 queue 模块进行线程间通信

5. 日志记录

  • logging模块:功能完整的日志系统
  • 支持不同优先级(DEBUG 到 CRITICAL)
  • 可输出到文件、网络等多种目标

6. 弱引用

  • weakref模块:跟踪对象而不创建强引用
  • 避免循环引用,支持缓存等应用场景

7. 数据结构工具

  • array模块:高效的一致类型数组
  • collections.deque:高效队列操作
  • bisect模块:有序列表操作
  • heapq模块:堆数据结构实现

8. 十进制浮点运算

  • decimal模块:精确的十进制浮点运算
  • 适用于财务计算等需要精确精度的场景
  • 避免二进制浮点数的精度问题
  • 支持精度控制和四舍五入规则

Python 虚拟环境和包管理

介绍 Python 虚拟环境的概念、创建方法和包管理

  • 虚拟环境和 pip 包管理是 Python 开发的重要工具,确保项目依赖的隔离和可重现性。

1. 虚拟环境概述

  • 问题背景:不同应用程序可能需要同一库的不同版本,导致版本冲突
  • 解决方案:虚拟环境是一个独立的目录,包含特定 Python 版本和包
  • 优势:不同应用可使用不同虚拟环境,避免版本冲突

2. 创建虚拟环境

  • venv模块:用于创建和管理虚拟环境
  • 创建命令python -m venv 目录名
  • 常用位置.venv 目录(隐藏目录)
  • 激活环境
    • Windows: tutorial-env\Scripts\activate
    • Unix/MacOS: source tutorial-env/bin/activate
  • 停用环境deactivate命令

3. 包管理(pip)

  • pip功能:安装、升级、移除软件包
  • 包来源:Python Package Index
  • 安装命令
    • 最新版本:python -m pip install 包名
    • 特定版本:python -m pip install 包名==版本号
  • 升级包python -m pip install --upgrade 包名
  • 卸载包python -m pip uninstall 包名

4. pip 常用命令

  • pip show:显示包的详细信息
  • pip list:列出所有已安装的包
  • pip freeze:生成包列表,用于 requirements.txt 文件
  • 从文件安装python -m pip install -r requirements.txt

浮点算术的争议和限制

解释计算机中浮点数表示和运算的固有限制

1. 核心问题

  • 二进制表示:计算机使用二进制(基数为2)小数表示浮点数
  • 精度限制:大多数十进制小数无法精确表示为二进制小数(如0.1)
  • 近似存储:浮点数只能近似存储,不是精确值

2. 表示性错误

  • 根本原因:二进制无法精确表示某些十进制分数
  • IEEE 754标准:大多数系统使用此标准,提供53位精度
  • 存储值0.1 实际存储为 3602879701896397 / 2**55,而非精确的 1/10

3. 实际影响

  • 显示问题:Python 显示近似值而非完整精度值
  • 计算误差0.1 + 0.1 + 0.1 != 0.3
  • 舍入无效round() 无法解决根本的精度问题

4. 解决方案

  • 比较函数:使用 math.isclose() 进行近似比较
  • 精确算术
    • decimal 模块:十进制精确运算
    • fractions 模块:基于有理数的运算
  • 求和精度:使用 sum()math.fsum() 减少累积误差

5. 精确值获取

  • as_integer_ratio():返回精确分数表示
  • hex():十六进制精确表示
  • 科学计算:NumPy 和 SciPy 包提供更专业的数值计算

6. 关键要点

  • 这是硬件层面的固有限制,不是 Python 的 bug
  • 对大多数应用足够精确
  • 需要精确十进制计算时应使用专门的模块
  • 输出格式化只是显示层面的处理,不改变存储精度