1. 学习基础知识

Python 是一种高级、解释型、通用编程语言。其设计哲学强调代码的可读性,使用显著的缩进。Python 是动态类型语言,并且具有垃圾回收机制。

◇基础语法

设置 Python 环境并开始学习基础知识。

◇变量和数据类型

变量用于存储信息,以便在计算机程序中引用和操作。它们还提供了一种用描述性名称标记数据的方式,使我们的程序更容易被读者和我们自己理解。将变量视为存储信息的容器是很有帮助的。它们的唯一目的是标记和存储内存中的数据。这些数据可以在整个程序中使用。

◇条件语句

Python 中的条件语句根据特定条件的评估结果(真或假)执行不同的操作。条件语句由 if-elif-else 语句和 MATCH-CASE 语句处理。

◇循环

循环用于重复执行一段代码。

◇类型转换

将一个数据类型的值(整数、字符串、浮点数等)转换为另一个数据类型的过程称为类型转换。Python 有两种类型转换:隐式和显式。

◇异常

Python 异常是在程序执行期间发生的事件,会中断程序的正常指令流。当引发异常时,表示发生了错误。Python 提供了一种使用 try-except 块处理这些异常的方法,使开发人员能够优雅地管理错误,并确保程序可以继续或顺利退出。

◇函数、内置函数

  • 函数 在编程中,函数是一个可重用的代码块,当它被调用时会执行某些功能。函数是每种编程语言中不可或缺的部分,因为它们有助于使代码更加模块化和可重用。在 Python 中,我们使用 def 关键字定义一个函数,然后写函数标识符(名称),后跟括号和冒号。

  • 示例

      def greet(name):
          print(f"Hello, {name}!")
    
      greet("World")     
    
  • 官方 Python 中的内置函数

  • 文章 Python 函数 - W3Schools

  • 文章 定义 Python 函数

◇列表、元组、集合和字典

  • 列表:列表就像其他语言中声明的动态大小数组(C++ 中的 vector 和 Java 中的 ArrayList)。列表不必总是同质的,这使其成为 Python 中最强大的工具。

  • 元组:元组是由逗号分隔的 Python 对象的集合。在某些方面,元组与列表在索引、嵌套对象和重复方面相似,但元组是不可变的,而列表是可变的。

  • 集合:集合是一种无序的、可迭代的、可变的数据类型,且没有重复元素。Python 的集合类表示数学中的集合概念。

  • 字典:在 Python 中,字典是一种有序(自 Python 3.7 起)[无序(Python 3.6 及之前)]的数据值集合,用于存储像映射一样的数据值。与其他数据类型不同,字典保存的是键值对。字典中的键值对使其更加优化。

  • 文章 Python 中的元组、列表和集合

  • 文章 Python 初学者:列表

  • 文章 Python 初学者:何时以及如何使用元组

  • 视频 Python 中列表、元组、集合和字典的区别

◇元组

元组是不可变的序列,这意味着一旦创建了元组,其元素就不能更改。元组通常用于存储相关的信息片段。它们通过在括号 () 内放置元素并用逗号分隔来定义。

◇集合

Python 集合是一种无序的、可迭代的、可变的数据类型,且没有重复元素。集合中元素的顺序是未定义的,尽管它可能包含各种元素。与列表相比,使用集合的主要优势在于它有一个高度优化的方法,用于检查集合中是否包含特定元素。

◇字典

在 Python 中,字典是一种内置的数据类型,允许你存储键值对。字典中的每个键都是唯一的,并且每个键都与一个值相关联。从 Python 3.7 开始,字典会保持添加项目的顺序。

2. 数据结构与算法

数据结构是一个可以用来存储和组织数据的命名位置。而算法则是解决特定问题的步骤集合。学习数据结构和算法使我们能够编写高效且优化的计算机程序。

◇数组和链表

数组将元素存储在连续的内存位置中,从而可以轻松计算存储元素的地址,这使得可以更快地访问特定索引处的元素。链表的存储结构不那么严格,元素通常不存储在连续的位置,因此它们需要存储额外的标签以引用下一个元素。数据存储方案的这种差异决定了哪种数据结构更适合特定情况。

◇哈希表

哈希表、映射、哈希映射、字典或关联数组都是同一数据结构的不同名称。它是一种实现集合抽象数据类型的数据结构,可以将键映射到值。

◇堆、栈和队列

◇二叉搜索树

二叉搜索树,也称为有序或排序二叉树,是一种有根的二叉树数据结构,其中每个内部节点的键大于该节点左子树中的所有键,小于其右子树中的所有键。

◇递归

递归是一种解决计算问题的方法,其中问题的解决方案依赖于同一问题的较小实例的解决方案。递归通过使用从自身代码中调用自身的函数来解决此类递归问题。

◇排序算法

排序是指以特定格式排列数据。排序算法指定了以特定顺序排列数据的方式。最常见的顺序是数字顺序或字典顺序。排序的重要性在于,如果数据以排序的方式存储,数据搜索可以优化到非常高的水平。

3. 模块

模块指的是包含Python语句和定义的文件。例如,包含Python代码的文件example.py被称为模块,其模块名称为example。我们使用模块将大型程序分解为小型、可管理和有组织的文件。此外,模块提供了代码的可重用性。

◇内置模块

Python拥有丰富的标准库,其中包含许多内置模块,提供了广泛的功能。一些最常用的内置模块包括:sys、os、math、datetime、random、re、itertools等。

◇自定义模块

模块指的是包含Python语句和定义的文件。例如,包含Python代码的文件example.py被称为模块,其模块名称为example。我们使用模块将大型程序分解为小型、可管理和有组织的文件。此外,模块提供了代码的可重用性。

4. Lambda函数

Python Lambda函数是匿名函数,意味着该函数没有名称。正如我们所知,def关键字用于在Python中定义普通函数。类似地,lambda关键字用于在Python中定义匿名函数。

5. 装饰器

装饰器是Python中的一种设计模式,允许用户在不修改现有对象结构的情况下为其添加新功能。装饰器通常在你想要装饰的函数定义之前调用。

6. 迭代器

迭代器是包含可计数数量值的对象。迭代器是一个可以迭代的对象,意味着你可以遍历所有的值。从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由__iter__()__next__()方法组成。

7. 正则表达式

正则表达式是用于指定文本中搜索模式的字符序列。通常,此类模式被字符串搜索算法用于对字符串进行“查找”或“查找并替换”操作,或用于输入验证。

8. 面向对象编程

在Python中,面向对象编程(OOP)是一种使用对象和类进行编程的编程范式。它旨在在编程中实现继承、多态、封装等现实世界的实体。OOP的主要概念是将数据和操作这些数据的函数绑定在一起,作为一个单一的单元,以便代码的其他部分无法访问这些数据。

◇类

类是一个用户定义的蓝图或原型,对象由此创建。类提供了一种将数据和功能捆绑在一起的方法。创建一个新类会创建一个新的对象类型,允许创建该类型的新实例。每个类实例都可以附加属性以维护其状态。类实例还可以具有方法(由其类定义)来修改其状态。

◇继承

继承是面向对象编程(OOP)中的一个基本概念,它允许一个类继承另一个类的属性和行为。

◇方法、Dunder方法

Python中的方法与函数有些相似,只是它与对象/类相关联。Python中的方法与函数非常相似,除了两个主要区别。

  • 该方法隐式地用于调用它的对象。
  • 该方法可以访问类中包含的数据。

Python中的Dunder或魔术方法是在方法名称中有两个前缀和后缀下划线的方法。Dunder在这里的意思是“双下划线”。这些通常用于运算符重载。魔术方法的几个例子是:__init____add____len____repr__等。

9. 包管理器

包管理器允许您管理项目正常运行所需的依赖项(由您或其他人编写的外部代码)。

PyPIPip 是最常见的选择,但也有一些其他可用的选项。

◇Poetry

Poetry 是一个用于 Python 的依赖管理和打包工具,可在 Windows、macOS 和 Linux 上运行。Poetry 高效地安装、管理和更新包及其依赖项。Poetry 无缝地创建、保存、加载和切换本地计算机上的项目环境。它是专门为 Python 项目设计的,提供了管理依赖项、虚拟环境和构建包的简化工作流程。

Poetry 作为包管理器,帮助您查找和安装包。如果您需要特定版本的包或不同版本的 Python,Poetry 可以轻松处理依赖管理和虚拟环境。只需几个命令,您就可以设置一个完全隔离的环境来运行不同版本的 Python 或包配置,同时保持您通常的开发环境。Poetry 的锁定文件确保在不同环境中安装的一致性,增强了项目的可重复性和稳定性。

◇Conda

Conda 是一个开源的包管理系统和环境管理系统,可在 Windows、macOS 和 Linux 上运行。Conda 快速安装、运行和更新包及其依赖项。Conda 轻松地创建、保存、加载和切换本地计算机上的环境。它最初是为 Python 程序创建的,但它可以为任何语言打包和分发软件。

◇uv

uv 是一个“极快”的 Python 包安装器和解析器。

◇PyPI

PyPI,通常读作 pie-pee-eye,是一个包含数十万个包的仓库。这些包从简单的 Hello, World 实现到高级的深度学习库都有涵盖。

◇Pip

Python 的标准包管理器是 pip。它允许您安装和管理不属于 Python 标准库的包。

10. 常用包

Python 拥有丰富的包和模块生态系统,可以帮助你充分利用这门语言。包本质上是一个包含多个模块和子包的目录。模块是一个包含相关函数、类和变量的单一文件。模块是 Python 代码组织的基本构建块。模块可以被视为一个包含一组相关代码的容器。

◇配置:pyproject.toml

该文件用于定义项目配置和依赖项。它是一个包含项目元数据的配置文件,例如项目名称、版本、依赖项和构建设置。pyproject.toml 文件被 poetryflit 等工具用于管理 Python 项目及其依赖项。

官方 编写 pyproject.toml 文件

11. 列表推导式

列表推导式是 Python 中一种简洁的创建列表的方式,只需一行代码即可完成。它们是创建和操作列表的强大工具,可以简化和缩短代码。

12. 生成器表达式

生成器表达式是 Python 中一种简洁的创建生成器的方式,只需一行代码即可完成。它们与列表推导式类似,但不是创建一个列表,而是创建一个生成器对象,该对象在需要时按需生成值。生成器表达式是高效生成大量序列值的有用工具,因为它们允许你创建生成器而无需一次性在内存中创建整个序列。这通常使用更少的内存,尤其是对于大型序列。

13. 编程范式

Python 是一种多范式编程语言,这意味着它支持多种编程范式。Python 支持的一些主要范式包括:

  • 命令式编程:这种范式侧重于逐步告诉计算机该做什么。Python 通过变量、循环和控制结构等特性支持命令式编程。

  • 面向对象编程(OOP):这种范式基于对象及其交互的概念。Python 通过类、继承和多态等特性支持面向对象编程。

  • 函数式编程:这种范式基于函数作为一等公民的概念,强调使用纯函数和不可变数据。Python 通过高阶函数、lambda 表达式和生成器等特性支持函数式编程。

  • 面向切面编程:这种范式基于将横切关注点与程序的主要功能分离的概念。Python 没有内置的面向切面编程支持,但可以通过库或语言扩展实现。

  • 文章 Python 编程范式

  • 视频 学习函数式编程 - Python 课程

14. 上下文管理器

上下文管理器是 Python 中的一种构造,允许你为代码块设置上下文,然后在代码块退出时自动清理或释放资源。它最常与 with 语句一起使用。

15. Python 框架

框架自动化了常见解决方案的通用实现,使用户能够专注于应用程序逻辑,而不是基本的例行流程。框架通过为应用程序开发提供结构,使 Web 开发人员的生活更加轻松。它们在 Web 应用程序中提供了快速、可靠且易于维护的通用模式。

◇Plotly Dash(同步)

Plotly Dash 是一个 Python 框架,允许你构建分析型 Web 应用程序。它是一个高级库,使你能够创建基于 Web 的交互式数据可视化仪表板,而无需深入了解 Web 开发。

◇Pyramid(同步)

Pyramid 是一个通用的、开源的、用 Python 构建的 Web 应用程序开发框架。它使 Python 开发人员能够轻松创建 Web 应用程序。Pyramid 由企业知识管理系统 KARL(乔治·索罗斯项目)支持。

◇gevent(异步)

gevent 是一个 Python 库,提供了事件循环的高级接口。它基于非阻塞 IO(libevent/libev)和轻量级的 greenlets。非阻塞 IO 意味着等待网络 IO 的请求不会阻塞其他请求;greenlets 意味着我们可以继续以同步风格编写代码。

◇aiohttp(异步)

aiohttp 是一个 Python 3.5+ 库,提供了一个简单而强大的异步 HTTP 客户端和服务器实现。

◇Tornado(异步)

Tornado 是一个用 Python 编写的可扩展、非阻塞的 Web 服务器和 Web 应用程序框架。它最初是为 FriendFeed 开发的;该公司于 2009 年被 Facebook 收购,随后 Tornado 被开源。

◇Sanic(异步)

Sanic 是一个 Python 3.7+ 的 Web 服务器和 Web 框架,旨在快速运行。它允许使用 Python 3.5 中添加的 async/await 语法,使你的代码非阻塞且快速。

◇Fast API(同步 + 异步)

FastAPI 是一个用于在 Python 中开发 RESTful API 的 Web 框架。FastAPI 基于 Pydantic 和类型提示来验证、序列化和反序列化数据,并自动生成 OpenAPI 文档。

◇Django(同步 + 异步)

Django 是一个免费且开源的、基于 Python 的 Web 框架,遵循模型-模板-视图架构模式。它由 Django 软件基金会维护,该基金会是一个在美国成立的 501 非营利性独立组织。

◇Flask(同步 + 异步)

Flask 是一个用 Python 编写的微型 Web 框架。它被归类为微框架,因为它不需要特定的工具或库。它没有数据库抽象层、表单验证或任何其他由现有第三方库提供通用功能的组件。相反,它通过要求你为项目需求选择和集成最佳库来提供灵活性。

16. 并发

Python 中的并发允许使用不同的方法同时执行多个任务。GIL(全局解释器锁)限制了线程的执行,使得多线程在计算任务上效率较低,但适合 I/O 操作。通过 multiprocessing 模块实现的多进程可以利用多个核心,提供真正的并行处理。通过 asyncio 实现的异步编程在 I/O 操作上表现最佳,允许同时处理数千个连接而不会阻塞。选择哪种方法取决于任务的性质。

◇多进程

多进程利用多个进程,每个进程都有自己的 GIL。这使得可以充分利用多个处理器核心,对于计算密集型任务非常有效。Python 的 multiprocessing 模块支持创建进程并在它们之间交换数据。

◇异步编程

异步编程由 asyncio 支持,允许代码在不阻塞的情况下执行,使用 asyncawait 关键字。这对于网络或文件操作等 I/O 任务特别有用,允许在不阻塞主线程的情况下处理数千个连接。

◇GIL

GIL 是一种机制,它允许一次只有一个线程执行 Python 代码。这一限制与 CPython 的内存管理有关,可能会降低多线程应用程序在多核系统上的效率。

◇多线程

多线程允许在单个进程内运行多个线程。然而,由于 GIL 的存在,线程无法在不同的核心上并行运行,这使得多线程适合 I/O 任务(例如网络请求),但不适合计算任务。

17. 环境

◇Pipenv

Pipenv 是一个旨在将打包世界中的最佳实践(捆绑、requirements.txtsetup.pysetup.cfg 等)引入 Python 世界的工具。它会自动为你的项目创建和管理虚拟环境,并在你安装/卸载包时从 Pipfile 中添加/删除包。它还会生成非常重要的 Pipfile.lock,用于生成确定性构建。

◇virtualenv

virtualenv 是一个用于创建隔离的 Python 环境的工具。它会创建一个包含所有必要可执行文件的文件夹,以便使用 Python 项目所需的包。

◇pyenv

pyenv 是一个用于在类 Unix 系统上管理多个 Python 版本的工具。它通过设置环境变量来指向所需 Python 版本的安装目录。这允许你在不修改系统默认 Python 安装的情况下切换不同的 Python 版本。

18. 静态类型检查

静态类型检查是一个强大的工具,可以帮助你在问题发生之前捕获错误。它还可以帮助你理解正在处理的代码,并使其更易于维护和重构。

◇Pydantic

Pydantic 是一个用于数据验证和设置管理的 Python 库,使用 Python 类型注解。

◇pyre

pyre 是一个 Python 的静态类型检查器。它是一个帮助你发现 Python 代码中类型错误的工具。Pyre 设计为快速、可扩展且易于使用。它在 Facebook 被用来帮助开发者在代码进入生产环境之前捕获类型错误。

◇pyright

pyright 是一个 Python 的静态类型检查器。它是微软的产品,使用 TypeScript 编写。它是一个语言服务器,使用语言服务器协议(LSP)与编辑器通信。它是 mypy 和 pytype 的一个很好的替代品。

◇mypy

mypy 是一个可选的 Python 静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。Mypy 结合了 Python 的表达能力和便利性与强大的类型系统和编译时类型检查。Mypy 对标准 Python 程序进行类型检查;使用任何 Python 虚拟机运行它们,基本上没有运行时开销。

◇typing

Typing 是 Python 中的一个模块,为类型提示提供运行时支持。Typing 模块定义了一组标准名称,可用于描述 Python 语言中的类型。Typing 模块在 Python 3.5 中被添加到标准库中。

19. 代码格式化

Python 代码格式化对于保持代码的可读性、一致性和减少错误至关重要。Black 是一个 Python 代码格式化工具。它是一个自动格式化 Python 代码以遵循 PEP 8 风格指南的工具。在 Python 项目中使用它是一个很好的选择,可以确保代码格式一致且正确。

◇yapf

yapf 是一个 Python 文件格式化工具。它是一个自动格式化 Python 代码以符合 PEP 8 风格指南的工具。它与 black 类似,但具有更多的配置选项。

◇black

black 是一个 Python 代码格式化工具。它是一个自动格式化 Python 代码以遵循 PEP 8 风格指南的工具。在 Python 项目中使用它是一个很好的选择,可以确保代码格式一致且正确。

◇ruff

一个极快的 Python 代码检查器和格式化工具,使用 Rust 编写。

20. 文档

◇Sphinx

Sphinx 是一个工具,可以轻松创建智能且美观的文档,由 Georg Brandl 编写,并在 BSD 许可证下授权。

21. 测试

编程中的测试意味着检查代码是否按预期工作。这是一种系统化的方法,可以在代码上线之前发现并修复错误(bug)。想象一下,建造一座漂亮的房子而不检查墙壁是否笔直或屋顶是否漏水——这就是没有测试的编码可能带来的感觉!

◇tox

Tox 是一个用于自动化测试环境管理和针对多个解释器配置进行测试的工具。它对于需要支持多个 Python 版本的 Python 代码库特别有用。

◇nose

Nose 是另一个开源的测试框架,它扩展了 unittest 以提供更灵活的测试框架。请注意,Nose 不再维护,pytest 被视为其替代品。

◇unittest / pyUnit

PyUnit 是一种创建单元测试程序和 Python 单元测试的简单方法。(请注意,docs.python.org 使用名称“unittest”,这也是模块名称。)

◇doctest

Python 的标准库附带了一个名为 doctest 的测试框架模块。doctest 模块以编程方式搜索 Python 代码中看起来像交互式 Python 会话的注释文本。然后,该模块执行这些会话,以确认由 doctest 引用的代码按预期运行。

◇pytest

pytest 是一个成熟的全功能 Python 测试工具,可以帮助你编写更好的程序。