Eu estava brincando com Path
objetos e encontrei um comportamento interessante. Ao testar com python3.11, Path.glob
retorna um generator
objeto.
>>> 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)]'
Testei o mesmo código com Python3.13, mas desta vez ele retorna um map
objeto.
>>> 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)]'
Eu sei que o resultado pode ser obtido ao envolvê-lo em uma lista, mas estou curioso para entender por que essa mudança foi feita. Meu pensamento inicial foi que poderia ser por motivos de desempenho. Mas um teste rápido mostra que a versão python3.13 é mais lenta que a python3.11 no meu sistema.
Aqui está o resultado do benchmark:
$ 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