You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python标准库中`while False:`的作用?以Iterable类实现为例

为什么CPython的collections.abc.Iterable用while False: yield None而非pass?

先看collections.abc.Iterable的完整实现代码:

class Iterable(metaclass=ABCMeta):

    __slots__ = ()

    @abstractmethod
    def __iter__(self):
        while False:
            yield None

    @classmethod
    def __subclasshook__(cls, C):
        if cls is Iterable:
            return _check_methods(C, "__iter__")
        return NotImplemented

    __class_getitem__ = classmethod(GenericAlias)

这段while False: yield None永远不会执行,但不能直接换成pass,核心原因有这几点:

  • 符合迭代器协议的类型要求:__iter__方法的规范是必须返回迭代器对象。生成器函数(哪怕是空的)天然会返回迭代器,而如果用pass,这个抽象方法默认返回None,类型上完全不符合要求。静态类型检查工具(比如mypy)会通过这个生成器写法,识别出__iter__的返回类型是迭代器,从而在子类实现时做类型校验。
  • 保持方法行为的一致性:即使是抽象方法,它的签名和预期行为也要和实际子类实现对齐。用生成器写法明确了这个方法的本质是要返回一个可迭代的迭代器,避免子类实现时出现返回非迭代器的错误。
  • 历史兼容因素:早期Python版本对抽象方法的约束更严格,这种写法能确保在老版本中也能正确体现__iter__的方法类型,避免出现运行时类型不匹配的问题。

内容的提问来源于stack exchange,提问作者Wood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:25:19