1. 学习基础知识
Python 是一种高级、解释型、通用编程语言。其设计哲学强调代码的可读性,使用显著的缩进。Python 是动态类型语言,并且具有垃圾回收机制。
- 官方 Python 官方网站
- 文章 Python - 维基百科
- 文章 教程系列:如何用 Python 编写代码
- 文章 Google 的 Python 课程
- 文章 W3Schools - Python 教程
- 视频 学习 Python - 完整课程
- 动态 探索关于 Python 的热门帖子
◇基础语法
设置 Python 环境并开始学习基础知识。
◇变量和数据类型
变量用于存储信息,以便在计算机程序中引用和操作。它们还提供了一种用描述性名称标记数据的方式,使我们的程序更容易被读者和我们自己理解。将变量视为存储信息的容器是很有帮助的。它们的唯一目的是标记和存储内存中的数据。这些数据可以在整个程序中使用。
- 文章 Python 中的变量
- 文章 W3Schools — Python 变量
- 文章 Python 数据类型
- 文章 Python 初学者:数据类型
- 视频 Python 变量和数据类型
◇条件语句
Python 中的条件语句根据特定条件的评估结果(真或假)执行不同的操作。条件语句由 if-elif-else 语句和 MATCH-CASE 语句处理。
◇循环
循环用于重复执行一段代码。
◇类型转换
将一个数据类型的值(整数、字符串、浮点数等)转换为另一个数据类型的过程称为类型转换。Python 有两种类型转换:隐式和显式。
- 文章 类型转换和强制转换
◇异常
Python 异常是在程序执行期间发生的事件,会中断程序的正常指令流。当引发异常时,表示发生了错误。Python 提供了一种使用 try-except 块处理这些异常的方法,使开发人员能够优雅地管理错误,并确保程序可以继续或顺利退出。
- 官方 异常文档
- 文章 Python 异常:简介
- 文章 错误和异常
- 文章 Python 异常处理
- 视频 Python 中的异常处理
◇函数、内置函数
-
函数 在编程中,函数是一个可重用的代码块,当它被调用时会执行某些功能。函数是每种编程语言中不可或缺的部分,因为它们有助于使代码更加模块化和可重用。在 Python 中,我们使用
def
关键字定义一个函数,然后写函数标识符(名称),后跟括号和冒号。 -
示例
def greet(name): print(f"Hello, {name}!") greet("World")
-
文章 定义 Python 函数
◇列表、元组、集合和字典
-
列表:列表就像其他语言中声明的动态大小数组(C++ 中的 vector 和 Java 中的 ArrayList)。列表不必总是同质的,这使其成为 Python 中最强大的工具。
-
元组:元组是由逗号分隔的 Python 对象的集合。在某些方面,元组与列表在索引、嵌套对象和重复方面相似,但元组是不可变的,而列表是可变的。
-
集合:集合是一种无序的、可迭代的、可变的数据类型,且没有重复元素。Python 的集合类表示数学中的集合概念。
-
字典:在 Python 中,字典是一种有序(自 Python 3.7 起)[无序(Python 3.6 及之前)]的数据值集合,用于存储像映射一样的数据值。与其他数据类型不同,字典保存的是键值对。字典中的键值对使其更加优化。
◇元组
元组是不可变的序列,这意味着一旦创建了元组,其元素就不能更改。元组通常用于存储相关的信息片段。它们通过在括号 ()
内放置元素并用逗号分隔来定义。
- 官方 元组文档
- 文章 何时以及如何使用元组
- 文章 Python 的元组数据类型:深入探讨与示例
- 视频 为什么元组甚至存在?
◇集合
Python 集合是一种无序的、可迭代的、可变的数据类型,且没有重复元素。集合中元素的顺序是未定义的,尽管它可能包含各种元素。与列表相比,使用集合的主要优势在于它有一个高度优化的方法,用于检查集合中是否包含特定元素。
◇字典
在 Python 中,字典是一种内置的数据类型,允许你存储键值对。字典中的每个键都是唯一的,并且每个键都与一个值相关联。从 Python 3.7 开始,字典会保持添加项目的顺序。
- 官方 Python 中的字典
- 文章 W3 Schools - 字典
- 文章 Python 中的字典
2. 数据结构与算法
数据结构是一个可以用来存储和组织数据的命名位置。而算法则是解决特定问题的步骤集合。学习数据结构和算法使我们能够编写高效且优化的计算机程序。
- 路线图 访问专门的DSA路线图
- 文章 学习数据结构与算法
- 视频 数据结构图解
- 动态 探索关于算法的热门帖子
◇数组和链表
数组将元素存储在连续的内存位置中,从而可以轻松计算存储元素的地址,这使得可以更快地访问特定索引处的元素。链表的存储结构不那么严格,元素通常不存储在连续的位置,因此它们需要存储额外的标签以引用下一个元素。数据存储方案的这种差异决定了哪种数据结构更适合特定情况。
- 文章 Python中的数组
- 文章 Python中的链表
- 视频 数组数据结构 | 图解数据结构
- 视频 链表数据结构 | 图解数据结构
◇哈希表
哈希表、映射、哈希映射、字典或关联数组都是同一数据结构的不同名称。它是一种实现集合抽象数据类型的数据结构,可以将键映射到值。
◇堆、栈和队列
-
栈:操作遵循LIFO(后进先出)原则,这意味着最后添加的元素将是第一个被移除的元素。栈可以使用数组或链表实现。如果栈内存不足,则称为栈溢出。
-
队列:操作遵循FIFO(先进先出)原则,这意味着第一个添加的元素将是第一个被移除的元素。队列可以使用数组实现。
-
堆:一种基于树的数据结构,其中父节点的值与其子节点的值以某种方式排序。堆可以是最小堆(父节点的值小于或等于其子节点的值)或最大堆(父节点的值大于或等于其子节点的值)。
-
文章 堆、栈、队列
-
文章 如何实现Python栈?
-
文章 Python中的堆实现
◇二叉搜索树
二叉搜索树,也称为有序或排序二叉树,是一种有根的二叉树数据结构,其中每个内部节点的键大于该节点左子树中的所有键,小于其右子树中的所有键。
- 文章 如何在Python中实现二叉搜索树
- 文章 Python中的二叉搜索树
- 视频 树数据结构 | 图解数据结构
◇递归
递归是一种解决计算问题的方法,其中问题的解决方案依赖于同一问题的较小实例的解决方案。递归通过使用从自身代码中调用自身的函数来解决此类递归问题。
- 文章 Python中的递归:简介
- 动态 探索关于递归的热门帖子
◇排序算法
排序是指以特定格式排列数据。排序算法指定了以特定顺序排列数据的方式。最常见的顺序是数字顺序或字典顺序。排序的重要性在于,如果数据以排序的方式存储,数据搜索可以优化到非常高的水平。
- 文章 Python中的排序算法
- 文章 Python - 排序算法
- 动态 探索关于算法的热门帖子
3. 模块
模块指的是包含Python语句和定义的文件。例如,包含Python代码的文件example.py
被称为模块,其模块名称为example。我们使用模块将大型程序分解为小型、可管理和有组织的文件。此外,模块提供了代码的可重用性。
- 官方 Python模块
- 文章 Python中的模块
◇内置模块
Python拥有丰富的标准库,其中包含许多内置模块,提供了广泛的功能。一些最常用的内置模块包括:sys、os、math、datetime、random、re、itertools等。
- 官方 Python模块索引
- 文章 Python模块
- 文章 Python - 内置模块
◇自定义模块
模块指的是包含Python语句和定义的文件。例如,包含Python代码的文件example.py
被称为模块,其模块名称为example。我们使用模块将大型程序分解为小型、可管理和有组织的文件。此外,模块提供了代码的可重用性。
- 官方 Python模块
- 文章 Python中的模块
- 文章 Python模块和包
4. Lambda函数
Python Lambda函数是匿名函数,意味着该函数没有名称。正如我们所知,def
关键字用于在Python中定义普通函数。类似地,lambda
关键字用于在Python中定义匿名函数。
- 文章 Python中的Lambda函数
- 文章 如何使用Lambda函数
- 视频 Python Lambda函数
5. 装饰器
装饰器是Python中的一种设计模式,允许用户在不修改现有对象结构的情况下为其添加新功能。装饰器通常在你想要装饰的函数定义之前调用。
- 文章 学习Python中的装饰器
- 文章 Python装饰器
- 视频 Python中的装饰器
- 视频 1分钟了解Python装饰器
6. 迭代器
迭代器是包含可计数数量值的对象。迭代器是一个可以迭代的对象,意味着你可以遍历所有的值。从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由__iter__()
和__next__()
方法组成。
- 文章 Python中的迭代器
- 文章 Python迭代器
- 文章 Python中的迭代器和可迭代对象
7. 正则表达式
正则表达式是用于指定文本中搜索模式的字符序列。通常,此类模式被字符串搜索算法用于对字符串进行“查找”或“查找并替换”操作,或用于输入验证。
- 官方 Python中的正则表达式
- 文章 Python正则表达式
- 文章 Python - 正则表达式
8. 面向对象编程
在Python中,面向对象编程(OOP)是一种使用对象和类进行编程的编程范式。它旨在在编程中实现继承、多态、封装等现实世界的实体。OOP的主要概念是将数据和操作这些数据的函数绑定在一起,作为一个单一的单元,以便代码的其他部分无法访问这些数据。
◇类
类是一个用户定义的蓝图或原型,对象由此创建。类提供了一种将数据和功能捆绑在一起的方法。创建一个新类会创建一个新的对象类型,允许创建该类型的新实例。每个类实例都可以附加属性以维护其状态。类实例还可以具有方法(由其类定义)来修改其状态。
- 官方文档 Python中的类
- 文章 Python类和对象
- 视频 Python OOP教程
◇继承
继承是面向对象编程(OOP)中的一个基本概念,它允许一个类继承另一个类的属性和行为。
- 文章 Python继承
- 文章 Python中的继承
◇方法、Dunder方法
Python中的方法与函数有些相似,只是它与对象/类相关联。Python中的方法与函数非常相似,除了两个主要区别。
- 该方法隐式地用于调用它的对象。
- 该方法可以访问类中包含的数据。
Python中的Dunder或魔术方法是在方法名称中有两个前缀和后缀下划线的方法。Dunder在这里的意思是“双下划线”。这些通常用于运算符重载。魔术方法的几个例子是:__init__
、__add__
、__len__
、__repr__
等。
9. 包管理器
包管理器允许您管理项目正常运行所需的依赖项(由您或其他人编写的外部代码)。
PyPI
和 Pip
是最常见的选择,但也有一些其他可用的选项。
- 开源 pypa/pipx
- 动态 探索关于 Python 的热门帖子
◇Poetry
Poetry 是一个用于 Python 的依赖管理和打包工具,可在 Windows、macOS 和 Linux 上运行。Poetry 高效地安装、管理和更新包及其依赖项。Poetry 无缝地创建、保存、加载和切换本地计算机上的项目环境。它是专门为 Python 项目设计的,提供了管理依赖项、虚拟环境和构建包的简化工作流程。
Poetry 作为包管理器,帮助您查找和安装包。如果您需要特定版本的包或不同版本的 Python,Poetry 可以轻松处理依赖管理和虚拟环境。只需几个命令,您就可以设置一个完全隔离的环境来运行不同版本的 Python 或包配置,同时保持您通常的开发环境。Poetry 的锁定文件确保在不同环境中安装的一致性,增强了项目的可重复性和稳定性。
- 官方 Poetry 文档
◇Conda
Conda 是一个开源的包管理系统和环境管理系统,可在 Windows、macOS 和 Linux 上运行。Conda 快速安装、运行和更新包及其依赖项。Conda 轻松地创建、保存、加载和切换本地计算机上的环境。它最初是为 Python 程序创建的,但它可以为任何语言打包和分发软件。
- 官方 Conda 文档
◇uv
uv 是一个“极快”的 Python 包安装器和解析器。
- 开源 astral-sh/uv
◇PyPI
PyPI,通常读作 pie-pee-eye,是一个包含数十万个包的仓库。这些包从简单的 Hello, World 实现到高级的深度学习库都有涵盖。
◇Pip
Python 的标准包管理器是 pip。它允许您安装和管理不属于 Python 标准库的包。
- 官方 pip 文档
- 文章 使用 Python 的 pip 管理项目依赖项
- 文章 Python PIP 简介
- 动态 探索关于 PIP 的热门帖子
10. 常用包
Python 拥有丰富的包和模块生态系统,可以帮助你充分利用这门语言。包本质上是一个包含多个模块和子包的目录。模块是一个包含相关函数、类和变量的单一文件。模块是 Python 代码组织的基本构建块。模块可以被视为一个包含一组相关代码的容器。
- 官方 requests
- 官方 pathlib
- 官方 asyncio
- 官方 dataclasses
- 官方 python-dotenv
- 官方 numpy
- 官方 pandas
◇配置:pyproject.toml
该文件用于定义项目配置和依赖项。它是一个包含项目元数据的配置文件,例如项目名称、版本、依赖项和构建设置。pyproject.toml
文件被 poetry
和 flit
等工具用于管理 Python 项目及其依赖项。
11. 列表推导式
列表推导式是 Python 中一种简洁的创建列表的方式,只需一行代码即可完成。它们是创建和操作列表的强大工具,可以简化和缩短代码。
12. 生成器表达式
生成器表达式是 Python 中一种简洁的创建生成器的方式,只需一行代码即可完成。它们与列表推导式类似,但不是创建一个列表,而是创建一个生成器对象,该对象在需要时按需生成值。生成器表达式是高效生成大量序列值的有用工具,因为它们允许你创建生成器而无需一次性在内存中创建整个序列。这通常使用更少的内存,尤其是对于大型序列。
13. 编程范式
Python 是一种多范式编程语言,这意味着它支持多种编程范式。Python 支持的一些主要范式包括:
-
命令式编程:这种范式侧重于逐步告诉计算机该做什么。Python 通过变量、循环和控制结构等特性支持命令式编程。
-
面向对象编程(OOP):这种范式基于对象及其交互的概念。Python 通过类、继承和多态等特性支持面向对象编程。
-
函数式编程:这种范式基于函数作为一等公民的概念,强调使用纯函数和不可变数据。Python 通过高阶函数、lambda 表达式和生成器等特性支持函数式编程。
-
面向切面编程:这种范式基于将横切关注点与程序的主要功能分离的概念。Python 没有内置的面向切面编程支持,但可以通过库或语言扩展实现。
-
文章 Python 编程范式
14. 上下文管理器
上下文管理器是 Python 中的一种构造,允许你为代码块设置上下文,然后在代码块退出时自动清理或释放资源。它最常与 with
语句一起使用。
- 官方 上下文库
- 文章 Python 中的上下文管理器
- 文章 上下文管理器
15. Python 框架
框架自动化了常见解决方案的通用实现,使用户能够专注于应用程序逻辑,而不是基本的例行流程。框架通过为应用程序开发提供结构,使 Web 开发人员的生活更加轻松。它们在 Web 应用程序中提供了快速、可靠且易于维护的通用模式。
◇Plotly Dash(同步)
Plotly Dash 是一个 Python 框架,允许你构建分析型 Web 应用程序。它是一个高级库,使你能够创建基于 Web 的交互式数据可视化仪表板,而无需深入了解 Web 开发。
- 官方 Plotly Dash 文档
- 官方 20 分钟教程
◇Pyramid(同步)
Pyramid 是一个通用的、开源的、用 Python 构建的 Web 应用程序开发框架。它使 Python 开发人员能够轻松创建 Web 应用程序。Pyramid 由企业知识管理系统 KARL(乔治·索罗斯项目)支持。
- 官方 Pyramid 网站
- 官方 Pyramid 文档
- 文章 Pyramid 框架介绍
◇gevent(异步)
gevent 是一个 Python 库,提供了事件循环的高级接口。它基于非阻塞 IO(libevent/libev)和轻量级的 greenlets。非阻塞 IO 意味着等待网络 IO 的请求不会阻塞其他请求;greenlets 意味着我们可以继续以同步风格编写代码。
◇aiohttp(异步)
aiohttp 是一个 Python 3.5+ 库,提供了一个简单而强大的异步 HTTP 客户端和服务器实现。
- 官方 aiohttp 文档
- 文章 使用 Python 和 aiohttp 创建 RESTful API
- 视频 Python Asyncio, Requests, Aiohttp | 更快地调用 API
◇Tornado(异步)
Tornado 是一个用 Python 编写的可扩展、非阻塞的 Web 服务器和 Web 应用程序框架。它最初是为 FriendFeed 开发的;该公司于 2009 年被 Facebook 收购,随后 Tornado 被开源。
◇Sanic(异步)
Sanic 是一个 Python 3.7+ 的 Web 服务器和 Web 框架,旨在快速运行。它允许使用 Python 3.5 中添加的 async/await 语法,使你的代码非阻塞且快速。
- 官方 Sanic 网站
◇Fast API(同步 + 异步)
FastAPI 是一个用于在 Python 中开发 RESTful API 的 Web 框架。FastAPI 基于 Pydantic 和类型提示来验证、序列化和反序列化数据,并自动生成 OpenAPI 文档。
◇Django(同步 + 异步)
Django 是一个免费且开源的、基于 Python 的 Web 框架,遵循模型-模板-视图架构模式。它由 Django 软件基金会维护,该基金会是一个在美国成立的 501 非营利性独立组织。
- 官方 Django 网站
- 官方 入门指南
- 文章 Django 是同步还是异步的?
- 视频 Python Django 初学者教程
- 订阅 探索关于 Django 的热门文章
◇Flask(同步 + 异步)
Flask 是一个用 Python 编写的微型 Web 框架。它被归类为微框架,因为它不需要特定的工具或库。它没有数据库抽象层、表单验证或任何其他由现有第三方库提供通用功能的组件。相反,它通过要求你为项目需求选择和集成最佳库来提供灵活性。
- 官方 Flask 网站
- 官方 Flask 教程
- 订阅 探索关于 Flask 的热门文章
16. 并发
Python 中的并发允许使用不同的方法同时执行多个任务。GIL(全局解释器锁)限制了线程的执行,使得多线程在计算任务上效率较低,但适合 I/O 操作。通过 multiprocessing
模块实现的多进程可以利用多个核心,提供真正的并行处理。通过 asyncio
实现的异步编程在 I/O 操作上表现最佳,允许同时处理数千个连接而不会阻塞。选择哪种方法取决于任务的性质。
◇多进程
多进程利用多个进程,每个进程都有自己的 GIL。这使得可以充分利用多个处理器核心,对于计算密集型任务非常有效。Python 的 multiprocessing
模块支持创建进程并在它们之间交换数据。
- 官方文档 Python 多进程文档
- 文章 Python 多进程示例
- 文章 Python 多进程
◇异步编程
异步编程由 asyncio
支持,允许代码在不阻塞的情况下执行,使用 async
和 await
关键字。这对于网络或文件操作等 I/O 任务特别有用,允许在不阻塞主线程的情况下处理数千个连接。
- 官方文档 Python AsyncIO 库
- 文章 Python 异步 I/O 完全指南
◇GIL
GIL 是一种机制,它允许一次只有一个线程执行 Python 代码。这一限制与 CPython 的内存管理有关,可能会降低多线程应用程序在多核系统上的效率。
- 文章 什么是 GIL?
◇多线程
多线程允许在单个进程内运行多个线程。然而,由于 GIL 的存在,线程无法在不同的核心上并行运行,这使得多线程适合 I/O 任务(例如网络请求),但不适合计算任务。
- 官方文档 Python 线程库
- 文章 Python 多线程入门
17. 环境
◇Pipenv
Pipenv 是一个旨在将打包世界中的最佳实践(捆绑、requirements.txt
、setup.py
、setup.cfg
等)引入 Python 世界的工具。它会自动为你的项目创建和管理虚拟环境,并在你安装/卸载包时从 Pipfile
中添加/删除包。它还会生成非常重要的 Pipfile.lock
,用于生成确定性构建。
- 官方文档 Pipenv 文档
◇virtualenv
virtualenv
是一个用于创建隔离的 Python 环境的工具。它会创建一个包含所有必要可执行文件的文件夹,以便使用 Python 项目所需的包。
- 官方文档 虚拟环境
◇pyenv
pyenv
是一个用于在类 Unix 系统上管理多个 Python 版本的工具。它通过设置环境变量来指向所需 Python 版本的安装目录。这允许你在不修改系统默认 Python 安装的情况下切换不同的 Python 版本。
- 开源项目 pyenv/pyenv
18. 静态类型检查
静态类型检查是一个强大的工具,可以帮助你在问题发生之前捕获错误。它还可以帮助你理解正在处理的代码,并使其更易于维护和重构。
◇Pydantic
Pydantic 是一个用于数据验证和设置管理的 Python 库,使用 Python 类型注解。
- 官方 Pydantic 文档
◇pyre
pyre 是一个 Python 的静态类型检查器。它是一个帮助你发现 Python 代码中类型错误的工具。Pyre 设计为快速、可扩展且易于使用。它在 Facebook 被用来帮助开发者在代码进入生产环境之前捕获类型错误。
- 官方 pyre 文档
◇pyright
pyright 是一个 Python 的静态类型检查器。它是微软的产品,使用 TypeScript 编写。它是一个语言服务器,使用语言服务器协议(LSP)与编辑器通信。它是 mypy 和 pytype 的一个很好的替代品。
- 官方 Pyright 文档
◇mypy
mypy 是一个可选的 Python 静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。Mypy 结合了 Python 的表达能力和便利性与强大的类型系统和编译时类型检查。Mypy 对标准 Python 程序进行类型检查;使用任何 Python 虚拟机运行它们,基本上没有运行时开销。
- 官方 mypy 文档
- 开源 python/mypy
◇typing
Typing 是 Python 中的一个模块,为类型提示提供运行时支持。Typing 模块定义了一组标准名称,可用于描述 Python 语言中的类型。Typing 模块在 Python 3.5 中被添加到标准库中。
- 官方 Typing 模块
19. 代码格式化
Python 代码格式化对于保持代码的可读性、一致性和减少错误至关重要。Black 是一个 Python 代码格式化工具。它是一个自动格式化 Python 代码以遵循 PEP 8 风格指南的工具。在 Python 项目中使用它是一个很好的选择,可以确保代码格式一致且正确。
- 官方 Pylint for Python
- 官方 Black 文档
◇yapf
yapf 是一个 Python 文件格式化工具。它是一个自动格式化 Python 代码以符合 PEP 8 风格指南的工具。它与 black 类似,但具有更多的配置选项。
- 开源 google/yapf
◇black
black 是一个 Python 代码格式化工具。它是一个自动格式化 Python 代码以遵循 PEP 8 风格指南的工具。在 Python 项目中使用它是一个很好的选择,可以确保代码格式一致且正确。
- 官方 Black 入门指南
- 官方 Black 文档
◇ruff
一个极快的 Python 代码检查器和格式化工具,使用 Rust 编写。
- 官方 Ruff 文档
20. 文档
◇Sphinx
Sphinx 是一个工具,可以轻松创建智能且美观的文档,由 Georg Brandl 编写,并在 BSD 许可证下授权。
- 官方 Sphinx 官网
21. 测试
编程中的测试意味着检查代码是否按预期工作。这是一种系统化的方法,可以在代码上线之前发现并修复错误(bug)。想象一下,建造一座漂亮的房子而不检查墙壁是否笔直或屋顶是否漏水——这就是没有测试的编码可能带来的感觉!
- 官方 Python 单元测试
- 文章 Python 测试教程
◇tox
Tox 是一个用于自动化测试环境管理和针对多个解释器配置进行测试的工具。它对于需要支持多个 Python 版本的 Python 代码库特别有用。
- 官方 Tox 文档
◇nose
Nose 是另一个开源的测试框架,它扩展了 unittest
以提供更灵活的测试框架。请注意,Nose 不再维护,pytest
被视为其替代品。
- 官方 Nose 介绍
- 文章 Python 中使用 Nose 入门
◇unittest / pyUnit
PyUnit 是一种创建单元测试程序和 Python 单元测试的简单方法。(请注意,docs.python.org 使用名称“unittest”,这也是模块名称。)
◇doctest
Python 的标准库附带了一个名为 doctest 的测试框架模块。doctest 模块以编程方式搜索 Python 代码中看起来像交互式 Python 会话的注释文本。然后,该模块执行这些会话,以确认由 doctest 引用的代码按预期运行。
◇pytest
pytest 是一个成熟的全功能 Python 测试工具,可以帮助你编写更好的程序。
- 官方 Pytest 文档
- 文章 Pytest 教程
- 文章 使用 Pytest 进行有效的 Python 测试
- 订阅 探索关于 Python 的热门帖子