查看原文
其他

Python 学习线路图,码住!

CSDN 2021-08-04

译者 | 弯月
出品 | CSDN(ID:CSDNnews)

以下为译文:

最近,有人在推特上发布了一份 Python 学习线路图,其中包含三个部分。

虽然我不确定这份列表是否完整,分组是否合理,但我觉得其中列举的主题很全面。


基础知识


首先是变量,不多说了。

其次,我认为运算符、表达式和内置的不可变类型都是基础知识。int、float、str 和 tuple 与 Python 编程的核心概念同等重要。

此外,我认为“循环”是一个过于粗犷的叫法,我希望我们不要将 for 和 while 语句统称为“循环”。我认为我们应该称它们为迭代。二者实现了两种逻辑量词“for all”(针对所有的……)和“there exists”(到这里退出)。我想我们应该谈谈 for 语句的最终结果:所有该范围内的值都需要处理。类似地,for-if-break 结构建立了一个"for exists"(遇到……时退出),它定义了满足条件范围的第一个值。没错,这里的核心是 range 对象。

我认为这些主题中有太多可以讨论的编程知识,这些都是基础知识。

使用变量来管理状态也是其中的一部分。但是,变量、赋值与状态的变化是高级话题,可能不属于基础知识。

另外,我认为函数定义也是基础。许多数学知识都是在其他函数的基础之上定义的函数。这是一种快速掌握复杂概念的方法。即便不知道如何计算平方根的所有细节,也可以使用平方根。

本文开头的推文中没有提到各种各样的赋值语句,包括通过赋值进行集合解构。这个遗漏的内容非常重要。

我同意文件与 File IO 是基础知识的一部分。如果仅限于读写文件,那么文件本质上就成了不可变的结构。我认为我们可以安全地忽略就地更新文件的话题,因为这是一个应用方面的话题,而不是有关语言的话题。Python 的文件操作支持最基本的 seek 和 tell 操作,但仅此而已。大多数现代应用程序都依赖于数据库来支持可更新文件。


数据结构


数据结构是基础到中级的知识。我更喜欢建立在语言基础上的术语“数据结构”。我认为可变的内置数据结构是路线图中的下一个知识点。我希望略过面向对象或函数式之类的术语,将学习重点放在列表、字典和集合,以及迭代上。这意味着列表解析式和生成器是数据结构这个重要组成的一部分。

列表解析式不是也不应该被当成高级概念。这是一个非常核心的概念。想一想,实现集合的映射/过滤/归约是大量编程的重点。虽然我们不必完全遵循这种方式,但即使是面向初学者的框架也应该呈现这一点。每个程序员在学习更简单的列表解析式时,都要从一大堆 for 和 if 语句和一堆变量入手。无论是哪种方式,本质上都是映射,可以描述为从一个集合到另一个集合的映射。

这就是标准库 collections 的由来。它是标准库的一部分。我认为它非常重要,不容忽视。我认为 dataclasses 也很重要。

说起可变数据结构,我们需要回顾 for 语句并在各种可迭代对象上使用它。Python 将概念应用于各种数据类型的方式是该语言的一个重要特征。


函数式编程


在我看来,接下来可以讨论一下函数式编程。通过高阶函数和装饰器的函数组合的想法建立在现有的基础上。此处我们不得不提及 map() 和 filter() 。由于 sorted()、max() 和 min() 等函数都提供了 key= 参数用于处理集合,因此它们都是函数式编程路线图的一部分。此外,需要注意 map() 和 max() 等函数之间的不一致。

我认为这里还应该提一下 itertools。它就像 io 一样也是标准库的一部分。我认为 itertools 和 functools 与数学模块和集合一样,是Python 的核心。

我认为 Typing.NamedTuple 和 dataclasses 也属于函数式编程的话题。不可变的数据类是无状态的,在创建列表解析式实现从一个集合到另一个集合的映射时会很有帮助。


面向对象编程


我认为面向对象编程及其相关概念建立在上述知识之上。类的定义和状态管理并不简单,尽管它们是 Python 的重要组成部分。

从某种程度上说,面向对象编程可以分解为两层:

  • 面向对象基础:继承、组合和不同类型的委托。这往往会暴露一些常见的设计模式,例如 Strategy、Decorator 和 Facade。

面向对象特性:元编程、装饰器、ABC、mixin 等。这些话题的设计意图都是避免跨越类边界的复杂边缘情况下的复制和粘贴。


并发


我不确定为什么并发和并行在线路图中是分开的主题。我曾让人们尝试以多种方式区分二者,即找到某个“使用异步实现轻量级并发”的应用场景。

这里的概念比较模糊,因为线程和进程是操作系统特性,而不是语言特性。然而,async/await 语言特性则属于 Python。当 asyncio 不提供你所需要的实际功能时就会很麻烦。具体来说,阻塞文件系统 I/O 不是 asyncio 的一部分,需要显式调用底层线程池以进行阻塞操作。

从某种程度上说,线路图应该包含 async/await。然而,如果不解释线程的本质是解决阻塞操作的方法,就很难讲清楚这个话题。


测试、集成和部署


这些工作需要用到很多工具,比如 pip、unittest、pytest、tox/nox、coverage 等。这些工具属于语言的一部分?还是更广泛的生态系统的一部分?

我认为它们并不属于语言的一部分。线路图到这里就结束了,但我认为我们还应该建立一个使用语言以及标准库的 Python 路线图。

讨论完语言本身(和一些库),我们还可继续讨论 pip 和打包等。

原文链接:https://slott-softwarearchitect.blogspot.com/2021/07/a-python-roadmap.html?m=1

声明:本文由CSDN翻译,转载请注明来源。

iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布|极客头条

不再“挤牙膏”!英特尔公布技术路线图,豪迈放言:“将在 2025 年夺回芯片性能桂冠!”

Pascal之父、编程祖师爷尼古拉斯•威茨痛批:教授成了项目经理,大学过于"重论文轻教学"


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存