随笔分类 -  技术研究 / Python / 流畅的Python

摘要:类元编程 (元类)是深奥的知识,99% 的用户都无需关注。如果你想知道是否需要使用元类,我告诉你,不需要(真正需要使用元类的人确信他们需要,无需解释原因)。 ——Tim Peters, Timsort 算法的发明者,活跃的 Python 贡献者 元类功能强大,但是难以掌握。使用元类可以创建具有某种特 阅读全文
posted @ 2025-02-15 14:40 superzzh 阅读(12) 评论(0) 推荐(0) 编辑
摘要:属性描述符 学会描述符之后,不仅有更多的工具集可用,还会对 Python 的运作方式有更深入的理解,并由衷赞叹 Python 设计的优雅。 ——Raymond Hettinger, Python 核心开发者和专家 本章的话题是描述符。 描述符是实现了特定协议的类,这个协议包括 __get__、__s 阅读全文
posted @ 2025-02-15 14:40 superzzh 阅读(2) 评论(0) 推荐(0) 编辑
摘要:动态属性和特性 特性至关重要的地方在于,特性的存在使得开发者可以非常安全并且确定可行地将公共数据属性作为类的公共接口的一部分开放出来。 ——Alex Martelli, Python 贡献者和图书作者 本章内容: 特性(property) 动态属性存取(__getattr__ 和 __setattr 阅读全文
posted @ 2025-02-15 14:39 superzzh 阅读(3) 评论(0) 推荐(0) 编辑
摘要:使用 asyncio 包处理并发 并发是指一次处理多件事。 并行是指一次做多件事。 二者不同,但是有联系。 一个关于结构,一个关于执行。 并发用于制定方案,用来解决可能(但未必)并行的问题。 ——Rob Pike, Go 语言的创造者之一 本章介绍 asyncio 包,这个包使用事件循环驱动的协程实 阅读全文
posted @ 2025-02-15 14:38 superzzh 阅读(12) 评论(0) 推荐(0) 编辑
摘要:使用期物处理并发 抨击线程的往往是系统程序员,他们考虑的使用场景对一般的应用程序员来说,也许一生都不会遇到……应用程序员遇到的使用场景,99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集结果。 Michele Simionato, 深度思考 Python 的人 本章主要讨论 concur 阅读全文
posted @ 2025-02-15 14:38 superzzh 阅读(1) 评论(0) 推荐(0) 编辑
摘要:协程 如果 Python 书籍有一定的指导作用,那么(协程就是)文档最匮乏、最鲜为人知的 Python 特性,因此表面上看是最无用的特性。 ——David Beazley, Python 图书作者 在“生成器”章节中我们认识了 yield 语句。但 yield 的作用不只是在生成器运行过程中返回一个 阅读全文
posted @ 2025-02-15 14:38 superzzh 阅读(5) 评论(0) 推荐(0) 编辑
摘要:上下文管理和 else 块 最终,上下文管理器可能几乎与子程序(subroutine)本身一样重要。目前,我们只了解了上下文管理器的皮毛……Basic 语言有 with 语句,而且很多语言都有。但是,在各种语言中 with 语句的作用不同,而且做的都是简单的事,虽然可以避免不断使 用点号查找属性,但 阅读全文
posted @ 2025-02-15 14:37 superzzh 阅读(1) 评论(0) 推荐(0) 编辑
摘要:可迭代的对象、迭代器和生成器 当我在自己的程序中发现用到了模式,我觉得这就表明某个地方出错了。程序的形式应该仅仅反映它所要解决的问题。代码中其他任何外加的形式都是一个信号,(至少对我来说)表明我对问题的抽象还不够深——这通常意味着自己正在手动完成事情,本应该通过写代码来让宏的扩展自动实现。 ——Pa 阅读全文
posted @ 2025-02-15 14:37 superzzh 阅读(4) 评论(0) 推荐(0) 编辑
摘要:正确重载运算符 有些事情让我不安,比如运算符重载。我决定不支持运算符重载,这完全是个个人选择,因为我见过太多 C++ 程序员滥用它。 ——James Gosling, Java 之父 本章讨论的内容是: Python 如何处理中缀运算符(如 + 和 |)中不同类型的操作数 使用鸭子类型或显式类型检查 阅读全文
posted @ 2025-02-15 14:37 superzzh 阅读(5) 评论(0) 推荐(0) 编辑
摘要:继承的优缺点 (我们)推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。 ——Alan Klay, "The Early History of Smalltalk" 本章探讨继承和子类化,重点是说明对 Python 而言尤为重要的两个细节: 子类化内置类型的缺点 多重继承和方法解析顺序(MR 阅读全文
posted @ 2025-02-15 14:36 superzzh 阅读(4) 评论(0) 推荐(0) 编辑
摘要:接口:从协议到抽象基类 抽象类表示接口。 ——Bjarne Stroustrup, C++ 之父 本章讨论的话题是接口:从鸭子类型的代表特征动态协议,到使接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class, ABC)。 接口的定义:对象公开方法的子集,让对象在系统中 阅读全文
posted @ 2025-02-15 14:36 superzzh 阅读(1) 评论(0) 推荐(0) 编辑
摘要:序列的修改、散列和切片 不要检查它是不是鸭子、它的叫声像不像鸭子、它的走路姿势像不像鸭子,等等。具体检查什么取决于你想用语言的哪些行为。(comp.lang.python, 2000 年 7 月 26 日) ——Alex Martelli 本章在 Vector2d 基础上进行改进以支持多维向量。不过 阅读全文
posted @ 2025-02-15 14:36 superzzh 阅读(3) 评论(0) 推荐(0) 编辑
摘要:符合 Python 风格的对象 绝对不要使用两个前导下划线,这是很烦人的自私行为。 ——Ian Bicking pip, virtualenv 和 Paste 等项目的创建者 得益于 Python 数据模型,自定义类型的行为可以像内置类型那样自然。 实现如此自然的行为,靠的不是继承,而是鸭子类型(d 阅读全文
posted @ 2025-02-15 14:35 superzzh 阅读(3) 评论(0) 推荐(0) 编辑
摘要:对象引用、可变性和垃圾回收 Python 使用引用式变量:变量和变量名是两个不同的东西。 在 Python 中,变量不是一个存储数据的盒子,而是一个针对盒子的标注。同时,一个盒子上可以有很多标注,也可以一个都没有。 a = [1, 2, 3] b = a a.append(4) print(b) # 阅读全文
posted @ 2025-02-15 14:35 superzzh 阅读(4) 评论(0) 推荐(0) 编辑
摘要:函数装饰器与闭包 有很多人抱怨,把这个特性命名为“装饰器”不好。主要原因是,这个名称与 GoF 书使用的不一致。装饰器这个名称可能更适合在编译器领域使用,因为它会遍历并注解语法书。 —“PEP 318 — Decorators for Functions and Methods” 本章的最终目标是解 阅读全文
posted @ 2025-02-15 14:35 superzzh 阅读(5) 评论(0) 推荐(0) 编辑
摘要:使用一等函数实现设计模式 符合模式并不表示做得对。 ——Ralph Johnson: 经典的《设计模式:可复用面向对象软件的基础》的作者之一 本章将对现有的一些设计模式进行简化,从而减少样板代码。 策略模式 实现策略模式,可以依赖 abc.ABC 和 abc.abstractmethod 来构建抽象 阅读全文
posted @ 2025-02-15 14:34 superzzh 阅读(1) 评论(0) 推荐(0) 编辑
摘要:一等函数 不管别人怎么说或怎么想,我从未觉得 Python 受到来自函数式语言的太多影响。我非常熟悉命令式语言,如 C 和 Algol 68,虽然我把函数定为一等对象,但是我并不把 Python 当作函数式编程语言。 —— Guido van Rossum: Python 仁慈的独裁者 在 Pyth 阅读全文
posted @ 2025-02-15 14:34 superzzh 阅读(2) 评论(0) 推荐(0) 编辑
摘要:文本和字节序列 人类使用文本,计算机使用字节序列 —— Esther Nam 和 Travis Fischer "Character Encoding and Unicode in Python" Python 3 明确区分了人类可读的文本字符串和原始的字节序列。 隐式地把字节序列转换成 Unico 阅读全文
posted @ 2025-02-15 14:34 superzzh 阅读(6) 评论(0) 推荐(0) 编辑
摘要:字典和集合 字典这个数据结构活跃在所有 Python 程序的背后,即便你的源码里并没有直接用到它。 ——A. M. Kuchling 可散列对象需要实现 __hash__ 和 __eq__ 函数。 如果两个可散列对象是相等的,那么它们的散列值一定是一样的。 # 字典提供了很多种构造方法 a = di 阅读全文
posted @ 2025-02-15 14:33 superzzh 阅读(1) 评论(0) 推荐(0) 编辑
摘要:序列构成的数组 你可能注意到了,之前提到的几个操作可以无差别地应用于文本、列表和表格上。 我们把文本、列表和表格叫作数据火车……FOR 命令通常能作用于数据火车上。 ——Geurts、Meertens 和 Pemberton ABC Programmer’s Handbook 容器序列 list、t 阅读全文
posted @ 2025-02-15 14:31 superzzh 阅读(6) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示