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

Python 3.13中pathlib.Path.glob为何返回map对象而非generator对象?

Python 3.13中pathlib.Path.glob为何返回map对象而非generator对象?

你观察到的这个差异确实是Python 3.13对pathlib.Path.glob()的一个实现改动,核心原因是代码重构与逻辑复用,而非单纯的即时性能提升(你测试里的微小性能差异和本地环境、测试场景的细节有关)。

先再明确下你发现的现象:

  • 在Python 3.11中,Path.glob()返回生成器对象:
    >>> from pathlib import Path
    >>> cwd = Path.cwd()
    >>> cwd.glob("*")
    <generator object Path.glob at 0x100b5e680>
    >>> import sys;sys.version
    '3.11.6 (v3.11.6:8b6ee5ba3b, Oct  2 2023, 11:18:21) [Clang 13.0.0 (clang-1300.0.29.30)]'
    
  • 到了Python 3.13,返回的变成了map对象:
    >>> from pathlib import Path
    >>> cwd = Path.cwd()
    >>> cwd.glob("*")
    <map object at 0x101867940>
    >>> import sys;sys.version
    '3.13.0 (v3.13.0:60403a5409f, Oct  7 2024, 00:37:40) [Clang 15.0.0 (clang-1500.3.9.4)]'
    

改动的具体原因

在Python 3.13的pathlib重构中,开发团队把路径匹配的核心逻辑抽离成了独立的、返回字符串路径的迭代器,然后用map(Path, 底层迭代器)把这些字符串转换成Path对象返回给用户。而之前的实现是用生成器函数(带yield语句)直接生成Path对象,所以返回的是生成器。

这个改动的主要目的是:

  • 减少代码冗余:把重复的路径生成、匹配逻辑集中到一处,方便维护和后续优化
  • 提升模块内部的可复用性:其他需要路径匹配的功能可以直接复用底层的字符串迭代器,不用再写重复的生成器逻辑

关于你发现的性能差异

你测试里看到3.13版本略慢一点是正常的,因为map和生成器的性能本就非常接近,而这次重构的重点不是单场景的执行速度,而是代码架构的优化。而且不同环境、不同匹配规模下的性能表现可能不同——比如在匹配大量文件时,重构后的代码可能在内存占用上更有优势。

另外需要注意的是,map对象和生成器都是惰性迭代器,你之前的所有用法(比如转列表、for循环遍历、next()调用)都能完全兼容,行为上几乎没有区别,只是内部实现的载体变了而已。

备注:内容来源于stack exchange,提问作者user459872

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:17:58