《流畅的Python》读书笔记
文章平均质量分 88
很多人都经历了“Python基础语法掌握得差不多了,但写的代码量多了就会感觉土,不够地道”的困扰。这是一本能在代码实战层面带来质的飞跃的书,着重讲解Python语言所独有的功能,助你成功进阶为Python高手,教你充分利用Python特性,写出有效且现代的Python 3代码。
andylin02
仰天大笑出门去,我辈岂是蓬蒿人。与君共勉!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《流畅的Python》读书笔记22(补充02): 异步编程- asyncio高并发爬虫DNS阻塞解决方案
当前博文未提及该问题,以下是基于C知道的知识内容为您回答。在Python的asyncio高并发爬虫中,DNS解析阻塞是一个常见且关键的性能瓶颈。传统的同步DNS解析会阻塞整个事件循环,导致所有并发任务停滞。以下是几种核心的避免DNS解析阻塞的策略与实践方案。原创 2026-06-04 17:56:38 · 3336 阅读 · 0 评论 -
《流畅的Python》读书笔记22(补充01): 异步编程- 异步编程核心实战解析
其价值在于以同步代码的线性可读性,实现单线程内极高的I/O并发能力,尤其适用于网络服务、爬虫、微服务网关等场景。异步编程的本质在于通过协作式多任务调度,在单线程内实现高并发I/O操作。为处理异步环境下的资源生命周期和迭代操作,Python引入了对应的异步协议。是运行异步程序的唯一标准入口,它封装了事件循环的完整生命周期管理。库,展示了异步HTTP客户端的典型应用模式,并引入了并发限流机制。此方法简化了多个并发任务的管理,结果顺序固定,便于后续处理。的批量任务管理,是处理高并发I/O的典型范式。原创 2026-06-04 17:51:31 · 3369 阅读 · 0 评论 -
《流畅的Python》读书笔记27: 深入学习路线总览
从《流畅的 Python》开始,你理解了数据模型与一等函数的优雅;紧接着,你深入到元编程的殿堂,掌握了描述符与元类的高阶技艺,甚至开始触碰解释器边界。至此,你已不再是“掌握 Python”的程序员,而是一位理解设计哲学、拥有系统视野的 Python 工匠。进阶之路永无止境,但这些高质量的书籍和资源能够为你提供持续前进的燃料与方向,帮你养成好的工程思维和实践习惯。期待你写出更优美、更健壮的代码。本文为个人学习笔记,仅用于知识分享。如有错误,欢迎指正。❤️ 如果觉得有用,请给个赞支持一下作者!原创 2026-06-09 00:00:00 · 3038 阅读 · 0 评论 -
《流畅的Python》读书笔记26: 全书概览回顾
《流畅的 Python》由巴西专家 Luciano Ramalho 撰写,是 Python 进阶的经典著作。第二版(2023 年出版)基于 Python 3.10/3.11,覆盖了从数据模型到元编程的完整知识体系。全书分为五大部分:全书旨在帮助开发者写出地道、高效、可维护的 Python 代码。第五部分 元编程第19章 执行器第20章 异步编程第21章 动态属性第22章 描述符第23章 类元编程第四部分 控制流第16章 迭代器生成器第17章 yield from第18章 并发模型第三部分 OOP 进阶第11原创 2026-06-08 00:00:00 · 2921 阅读 · 0 评论 -
《流畅的Python》读书笔记25: 第五部分 元编程 - 类元编程
元类是深奥的黑魔法,99% 的用户永远不需要触及。如果你不确定是否需要,那就不需要。类元编程(Class Metaprogramming)是指在运行时创建或定制类的技术。Python 中实现类元编程的主要工具有:类装饰器、钩子和元类(metaclass)。本章是全书最后一章(第二版),将带领读者走进 Python 元编程的神秘殿堂,理解类创建的底层机制,并学习如何在不显式修改类定义的情况下动态改变类的行为。本章核心议题类创建流程type的构造过程,__new__和__init__在类创建中的角色。原创 2026-06-07 00:00:00 · 3031 阅读 · 0 评论 -
《流畅的Python》读书笔记24: 第五部分 元编程 - 属性描述符
描述符(Descriptor)是 Python 中一个强大但常被误解的特性。它允许开发者定义可重用的属性访问逻辑,是许多高级特性(如@property以及__slots__)的底层实现机制。理解描述符将使你对 Python 的对象模型有更深层次的掌握。描述符是一个实现了描述符协议(__get____set____delete__中的一个或多个)的类。描述符的实例可以作为其他类的类属性,从而控制对被管理属性的访问。描述符协议__get____set____delete__方法的作用与签名。原创 2026-06-06 00:00:00 · 3472 阅读 · 0 评论 -
《流畅的Python》读书笔记20(补充01): Python 并发模型 - 优化多进程IPC性能的实用技巧
优化多进程间通信性能的核心在于。原创 2026-06-02 15:15:13 · 3377 阅读 · 0 评论 -
《流畅的Python》读书笔记19(补充01): 使用 yield from - 再谈PE380
PEP 380 的yield from是 Python 生成器机制的“胶水”,它解决了生成器组合时的复杂性,实现了透明的双向通信和返回值传递。它是理解 Python 协程演进(从 generator-based coroutines 到 native coroutines)的关键一环。原创 2026-06-01 19:26:58 · 3485 阅读 · 0 评论 -
《流畅的Python》读书笔记23: 第五部分 元编程 - 动态属性和特性
第 22 章“动态属性和特性”是《流畅的 Python》第二版中关于元编程的开篇章节。@property装饰器和特殊方法。Python 中的数据属性和方法统称为属性(attribute)。方法是可调用的属性。乍看起来,通过 obj.attr 访问属性和调用方法没什么两样,但访问方法时只是多了对括号的调用。这种统一使得特性(property)恰到好处地充当了二者的桥梁,让开发者能够在不改变类接口的前提下,将简单的数据属性替换为带有存取逻辑的方法。原创 2026-06-05 00:00:00 · 3572 阅读 · 0 评论 -
《流畅的Python》读书笔记22: 第四部分 控制流 - 异步编程
恭喜你进入到《流畅的 Python》第二版的最后章节之一。第 21 章“异步编程”从更高层视角重新审视 asyncio,聚焦于用现代 Python 编写异步代码时的推荐惯用法。asyncio库自 Python 3.4 引入以来,经历了数次重大演变。早期版本依赖装饰器和yield from语法,编写和理解都比较复杂。从 Python 3.5 开始引入的asyncawait关键字,极大简化了异步代码的编写。原创 2026-06-04 00:00:00 · 3443 阅读 · 0 评论 -
《流畅的Python》读书笔记21: 第四部分 控制流 - 并发执行器
抨击线程的人往往是系统程序员,他们心中有着典型应用程序员终其一生都不会遇到的用例。……在 99% 的用例中,应用程序员可能会遇到的情况是,生成一堆独立线程并将结果收集到队列中的简单模式就是他们需要了解的一切。—— Michele Simionato,Python 深度思考者第 20 章是《流畅的 Python》第二版的新章节,从第一版的“Concurrency with Futures”更名为“Concurrent Executors”。原创 2026-06-03 00:00:00 · 3636 阅读 · 0 评论 -
《流畅的Python》读书笔记20: 第四部分 控制流 - Python 并发模型
第 19 章“Python 并发模型”是《流畅的 Python》第 2 版新增的章节,也是整个并发模块的“顶层设计篇”。如果说第 17 章(一期物和并发)介绍的是这个高级并发 API,第 18 章(使用asyncio包处理并发)介绍的是异步 I/O 驱动的事件循环模型,那么第 19 章则用更宏观的视角,将 Python 中所有并发方案拼图完整呈现出来。并发是同时处理多件事,并行是同时做多件事。二者不同,但有联系。——Rob Pike,Go 语言联合创始人什么时候该用哪个并发模型?原创 2026-06-02 00:00:00 · 3727 阅读 · 0 评论 -
《流畅的Python》读书笔记19: 第四部分 控制流 - 使用 yield from
第 18 章“使用 yield from”是《流畅的 Python》第二版中基于生成器的协程(classic coroutine)部分的终点,同时也是通向现代 async/await 异步编程的一座关键桥梁。在 Python 3.3 之前,当我们想要将一个生成器的产出“转发”给另一个生成器时,必须手动编写 for 循环来迭代子生成器并逐一 yield 其产出的值。然而,当一个生成器还需要处理.send().throw()和.close()方法时,纯手工转发的代码就会变得异常复杂且极易出错。原创 2026-06-01 09:52:18 · 3527 阅读 · 0 评论 -
《流畅的Python》读书笔记14(补充02): 从协议到抽象基类 - 高并发下单策略优化方案
在高并发下单场景中,Promotion策略类的实例化瓶颈主要体现在频繁的对象创建开销、内存占用以及可能的初始化成本上。为了解决这些问题,可以从对象复用、延迟加载、缓存机制和架构设计等多个维度进行优化。原创 2026-05-28 10:34:14 · 3354 阅读 · 0 评论 -
《流畅的Python》读书笔记14(补充01): 从协议到抽象基类 - 策略模式实现动态折扣计算
在电商折扣系统的设计示例中,其核心逻辑围绕一个实现了策略模式(Strategy Pattern)的折扣计算框架展开。该框架通过抽象基类Promotion定义了一个正式的接口契约,并通过具体的策略类实现不同的折扣算法,最终由Order类整合订单信息与促销策略进行计算。原创 2026-05-28 10:21:23 · 3597 阅读 · 0 评论 -
《流畅的Python》读书笔记13(补充02): 序列的修改、散列和切片 - Vector切片零拷贝实现关键
在博客中实现的Vector类,其切片操作通过方法判断传入的index是否为slice对象。若是,则使用对内部的array('d')对象进行切片,然后将切片结果传递给cls(即Vector类自身)的构造器以创建新实例。这个过程涉及对底层array对象的数据复制,并非零拷贝。要实现内存零拷贝的切片,核心在于Vector,而非复制数据。这通常通过引用原始数据的视图(view)来实现,但必须严格保证原始数据的不可变性,否则视图的修改会影响到所有共享该数据的实例。原创 2026-05-27 11:10:03 · 3240 阅读 · 0 评论 -
《流畅的Python》读书笔记18: 第四部分 控制流 - 迭代器、生成器和经典协程
第 17 章是《流畅的 Python》中关于“控制流程”部分的开始,深入探讨了 Python 中迭代器、生成器和经典协程(基于生成器的协程)的核心概念。这些特性是 Python 实现惰性求值、高效处理大数据流、以及构建协作式多任务的基础。“迭代器是 yield 的起源,而 yield 又是协程的基石。可迭代对象与迭代器协议:理解__iter__和__next__方法,以及for循环背后的工作原理。生成器函数:使用yield关键字简化迭代器的创建,实现惰性产生值的序列。生成器表达式。原创 2026-05-31 00:00:00 · 4035 阅读 · 0 评论 -
《流畅的Python》读书笔记17: 第三部分 类和协议 - 运算符重载
运算符重载是让自定义类的实例能够响应 Python 的内置运算符(如//**等)的机制。这一特性使得我们编写的对象可以像内置数值类型一样自然地进行运算。Python 对运算符重载的限制比 C++ 或 Ruby 更严格:不能重载内置类型的运算符、不能创建新的运算符,且某些运算符(如isandornot)不能被重载。Python 通过特殊方法(如__add____sub____mul__等)来实现运算符重载。当 Python 解释器遇到a + b时,它会尝试调用。若a没有实现__add__(或返回。原创 2026-05-30 00:00:00 · 3795 阅读 · 0 评论 -
《流畅的Python》读书笔记16: 第三部分 类和协议 - 类型提示进阶
我学到了一个痛苦的教训:对于小型程序,动态类型就足够了;但对于大型程序,你需要更加严格的方法。第 15 章深入扩展了第 8 章的类型提示内容,加入了 Python 的“渐进式类型系统”的高级话题。一旦像第 12 章那样更成熟的序列类型、第 13 章那样设计出正式接口,你会对可靠性、明确接口与类型安全性有更高的要求——那么第 15 章这种篇幅的进阶就非常必要:帮助阐明TypedDict@overload、型变、Protocol等特性。TypedDict。原创 2026-05-29 00:00:00 · 3866 阅读 · 0 评论 -
《流畅的Python》读书笔记15: 第三部分 类和协议 - 继承:利弊
学习至此,我们已先后接触到面向对象类的设计、协议与抽象基类,此时进入第 14 章“继承:利弊”,正是 Python 面向对象设计理念“承上启下”的一章。英国计算机科学家 Tony Hoare 曾对继承给出了颇为尖锐的评价:“引入继承,原本是冲着减少冗余代码的良好愿望,但我最终还是觉得它弊大于利。这就是一个典型的‘首先我们有了一个好想法,其后却发现其中存在隐患’的例子。”这种矛盾的根源在于:继承既是最直观的代码复用工具,却也同时引入了强耦合问题。原创 2026-05-28 00:00:00 · 3881 阅读 · 0 评论 -
《流畅的Python》读书笔记14: 第三部分 类和协议 - 从协议到抽象基类
流畅的 Python》第 13 章系统梳理了 Python 从“协议”到“抽象基类”的接口演化三阶段:动态协议(Duck Typing)→ 静态协议(Static Protocol/Goose Typing)→ 抽象基类(ABC)。本章内容相当于第 12 章“序列协议”之后的一个升级——如果说第 12 章告诉你“如何让对象像序列一样工作”,那么第 13 章教你的则是“如何在多个开发者协作环境中,为‘像序列一样工作’这类概念建立正式的契约”。接口是实现特定角色的方法集合。原创 2026-05-27 10:51:24 · 3762 阅读 · 0 评论 -
《流畅的Python》读书笔记13(补充01): 序列的修改、散列和切片 - 序列类型完整协议实现(进阶必备)
要实现符合 Python 风格的序列类型,除了博客中已覆盖的核心协议实现,在进阶实践中仍需关注若干关键细节与潜在陷阱。这些要点涉及性能优化、协议完整性、边界条件处理以及与其他 Python 特性的交互。原创 2026-05-27 10:50:49 · 3402 阅读 · 0 评论 -
《流畅的Python》读书笔记10(补充02): 装饰器和闭包 - 闭包并发安全解决方案
在高并发场景下,函数返回的averager闭包实例所持有的history列表(或优化版本中的count和total)作为共享状态,若被多个线程或协程同时访问和修改,将引发数据竞争(Data Race),导致计算结果不一致、数据损坏甚至程序崩溃。博客中展示的示例代码并非为并发设计。以下是针对此问题的系统性分析与解决方案。原创 2026-05-25 18:12:24 · 2978 阅读 · 0 评论 -
《流畅的Python》读书笔记10(补充01): 装饰器和闭包 - 闭包实现动态平均值计算
函数的核心算法是一个基于闭包的、动态维护数据序列并计算其平均值的在线算法。其原始实现强调概念的清晰演示,但存在随着数据量增长而性能下降的问题。在实际生产环境中,应根据具体需求(如是否需保留历史数据、对实时性的要求、内存限制等)选择或实现计算复杂度更优的变体,例如采用增量计算或滑动窗口策略。该函数精妙地展示了闭包如何将数据(history)与操作(averager)绑定,形成一个自包含的、有状态的函数对象,是理解 Python 中函数作为一等公民和闭包威力的关键示例。原创 2026-05-25 18:11:07 · 3019 阅读 · 0 评论 -
《流畅的Python》读书笔记11(补充02): 使用一等函数实现设计模式 - 函数策略模式防污染四法
在Python中使用函数替代类实现策略模式时,避免全局命名空间污染是提升代码可维护性的关键。以下是几种主流方案的对比与实践指南。globals()*_promo这是最显式、最可控的方式,广泛用于Flask、FastAPI等框架。它通过装饰器将策略函数自动添加到一个中,完全避免在全局命名空间中散落大量策略函数。结合setuptools的入口点(entry points)或标准库的importlib,可实现插拔式策略发现,彻底解耦策略定义与核心系统。globals()原创 2026-05-25 18:08:15 · 3057 阅读 · 0 评论 -
《流畅的Python》读书笔记11(补充01): 使用一等函数实现设计模式(简洁版)
核心理念:语言特性重塑设计模式文章开篇引用了《设计模式》作者之一Ralph Johnson的观点“符合模式并不表示做得对”,并指出设计模式的适用性高度依赖于编程语言的特性。在C++或Java中必要的模式结构,在Python中可能因语言的高级特性(如一等函数、装饰器)而变得冗余或可被大幅简化。策略模式:从“类”到“函数”的简化传统面向对象实现:需要定义一个抽象基类Promotion和多个具体的策略子类(如),每个子类仅实现一个discount方法。原创 2026-05-25 18:05:48 · 2783 阅读 · 0 评论 -
《流畅的Python》读书笔记12(补充01): 符合 Python 风格的对象 - Python类的运算协议全解析
在构建符合Python风格的自定义类时,除了博客中详述的核心特殊方法和优化技术外,还存在若干进阶知识领域和实战中易被忽视的坑位。这些内容对于构建健壮、高效且符合Python生态期望的类至关重要。原创 2026-05-25 18:02:36 · 2859 阅读 · 0 评论 -
《流畅的Python》读书笔记08(补充01): 函数是一等对象函数式编程核心(简洁版)
对“函数作为一等对象”这一编程范式的实现与应用上,其核心并非单一算法,而是一套以高阶函数为核心、支持函数式编程风格的。本文将对该机制进行深度拆解。原创 2026-05-21 15:25:46 · 2559 阅读 · 0 评论 -
《流畅的Python》读书笔记04(补充03): 字典和集合 - 默认字典定期清理策略
清理策略适用场景优点缺点实现复杂度基于大小阈值内存敏感应用简单直接,防止OOM可能清理活跃数据低LRU(最近最少使用)缓存系统保留热数据需要跟踪访问时间中LFU(最不经常使用)访问模式稳定保留常用数据需要统计频率中TTL自动过期临时数据存储自动管理生命周期需要额外存储时间戳中智能混合策略复杂生产环境综合多种因素实现复杂,调参困难高。原创 2026-05-21 11:30:51 · 2558 阅读 · 0 评论 -
《流畅的Python》读书笔记07(补充03): 对象引用、可变性和垃圾回收 - 深复制循环引用内存安全机制解析
Python的函数在处理循环引用时,通过内部的备忘录(memo)字典机制来打破无限递归,确保复制过程能够正确终止。这个memo字典本身的设计就考虑了内存管理的安全性,在正常情况下不会导致内存泄漏。其核心机制是,在复制完成后,该字典会被自动回收。原创 2026-05-21 11:30:19 · 2770 阅读 · 0 评论 -
《流畅的Python》读书笔记07(补充02): 对象引用、可变性和垃圾回收 - Python深复制如何处理循环引用
当前博文未提及该问题,以下是基于C知道的知识内容为您回答在Python中,处理自定义类中的循环引用时,主要通过备忘录(memo)机制和递归复制策略来避免无限递归,确保复制过程能正确完成。下面我将从算法原理、实现机制、应用场景和性能影响四个方面进行深度拆解。使用一个字典作为备忘录,存储的映射关系。当遇到已经复制过的对象时,直接返回已创建的副本,从而打破循环引用链。算法步骤分解:二、自定义类的深复制控制2.1 方法的实现自定义类可以通过实现方法来控制深复制行为,这在处理循环引用时尤为重要。原创 2026-05-21 11:30:11 · 2607 阅读 · 0 评论 -
《流畅的Python》读书笔记07(补充01): 对象引用、可变性和垃圾回收 - 浅拷贝与深拷贝原理剖析
在博客内容中,核心的函数/算法逻辑主要集中在和,这些是Python底层内存管理的基石。以下是对这两部分逻辑的深度拆解。原创 2026-05-21 11:30:01 · 2673 阅读 · 0 评论 -
《流畅的Python》读书笔记06(补充02): 数据类构建器 - dataclass适配ORM的三大优势
dataclass。原创 2026-05-20 16:29:00 · 2568 阅读 · 0 评论 -
《流畅的Python》读书笔记06(补充01): 数据类构建器 - 三类数据容器对比(简洁版)
Python 3.7+ 引入的@dataclass装饰器、以及是三种用于简化数据容器类创建的工具,旨在减少__init____repr__和__eq__等样板代码的编写。原创 2026-05-20 16:28:19 · 2253 阅读 · 0 评论 -
《流畅的Python》读书笔记13: 第三部分 类和协议 - 序列的修改、散列和切片
在第 11 章中,我们学习了如何构建“符合 Python 风格的对象”。现在,第 12 章将带领我们进入序列的世界,把普通的类变成像listtuple一样优雅的序列类型。本章的核心任务是:以第 11 章的二维向量 Vector2d 类为基础,构建一个多维向量 Vector 类。这个自定义类将具备与 Python 标准不可变扁平序列完全相同的行为,比如支持索引访问、切片、迭代和散列等。阅读本章时你会惊奇地发现:创建一个功能完备的序列类型在 Python 中异常简单,原创 2026-05-26 00:00:00 · 3469 阅读 · 0 评论 -
《流畅的Python》读书笔记12: 第三部分 类和协议 - 符合 Python 风格的对象
流畅的 Python》第 11 章(第一版第 9 章)聚焦于如何创建**“Pythonic”的对象**——即行为符合 Python 语言惯用风格的自定义类。Python 的对象模型通过特殊方法(__repr____eq____hash__等)让用户定义的类能够与语言的核心特性无缝集成。良好的对象字符串表示(__repr____str____format__完整的比较运算符(__eq__及通过辅助)哈希化(__hash__)使对象可作字典键私有属性和保护属性的命名约定@property。原创 2026-05-25 00:00:00 · 2882 阅读 · 0 评论 -
《流畅的Python》读书笔记04(补充02): 字典和集合 - defaultdict内存开销解析
与普通dict内存占用有固定额外开销(存储),但数据存储部分与普通dict相同对象生命周期自动创建并缓存默认值,可能延长对象生命周期GC 行为更容易创建循环引用,可能增加 GC 压力使用策略:根据场景选择——内存敏感选普通dict,代码简洁和性能优先选在实际应用中,大多数情况下的微小内存开销可以被其带来的代码简洁性和性能优势所抵消。关键是要避免在工厂函数中创建可能造成内存泄漏的大对象或循环引用。原创 2026-05-20 10:08:32 · 2429 阅读 · 0 评论 -
《流畅的Python》读书笔记05(补充04): 文本和字节序列 - 避免struct浮点精度损失的关键技巧
格式统一是根本:在协议设计阶段,发送端和接收端必须严格约定浮点数的格式('f'或'd')和字节序('>'或,并在代码中始终使用显式格式字符串。双精度优先:除非有明确的存储或带宽限制,在网络协议中优先使用双精度 ('d',这样可以无缝匹配 Python 的float类型,避免不必要的精度损失。区分“表示误差”与“传输误差”:理解0.1 + 0.2!= 0.3是浮点数表示法的固有局限,而非struct的 bug。业务逻辑应使用或Decimal来处理比较和计算。高精度场景用 Decimal。原创 2026-05-20 10:08:05 · 2302 阅读 · 0 评论 -
《流畅的Python》读书笔记05(补充03): 文本和字节序列 - 显式指定字节序避免struct解析错误
假设一个简单的协议数据包包含:一个无符号短整数(uint16)表示版本,一个无符号长整数(uint32)表示数据长度,以及一个单精度浮点数(float"""按照网络字节序(大端序)打包数据。格式字符串 '!HIf' 解析:!: 网络字节序(大端序)H : unsigned short (uint16) - 版本I : unsigned int (uint32) - 长度f : float (单精度) - 值"""# 关键:格式字符串以 '!' 开头,强制使用网络字节序。原创 2026-05-20 10:04:54 · 2275 阅读 · 0 评论 -
《流畅的Python》读书笔记05(补充02): 文本和字节序列 - Unicode三明治在微服务API中的实践
在微服务API中落地“Unicode三明治”原则,关键在于。原创 2026-05-19 20:26:25 · 2028 阅读 · 0 评论
分享