我正在研究Path
对象并发现了一个有趣的行为。使用 python3.11 测试时,Path.glob
返回一个generator
对象。
>>> 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)]'
我使用 Python3.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)]'
我知道可以通过将其包装在列表中来获得结果,但我很好奇为什么要进行这种更改。我最初的想法是这可能是由于性能原因。但快速测试表明,在我的系统上,python3.13 版本比 python3.11 慢。
基准测试结果如下:
$ python3.11 -m timeit -n 20000 'from pathlib import Path;cwd=Path.cwd();r=list(cwd.glob("*.py"))'
20000 loops, best of 5: 72.9 usec per loop
$ python3.13 -m timeit -n 20000 'from pathlib import Path;cwd=Path.cwd();r=list(cwd.glob("*.py"))'
20000 loops, best of 5: 75.1 usec per loop