• Johannes Gijsbers's avatar
    Patch #943206: · 836f5433
    Johannes Gijsbers yazdı
    `glob.glob()` currently calls itself recursively to build a list of matches of
    the dirname part of the pattern and then filters by the basename part. This is
    effectively BFS. ``glob.glob('*/*/*/*/*/foo')`` will build a huge list of all
    directories 5 levels deep even if only a handful of them contain a ``foo``
    entry. A generator-based recusion would never have to store these list at once
    by implementing DFS. This patch converts the `glob` function to an `iglob`
    recursive generator . `glob()` now just returns ``list(iglob(pattern))``.
    
    I also cleaned up the code a bit (reduced duplicate `has_magic()` checks and
    created a second `glob0` helper func so that the main loop need not be
    duplicated).
    
    Thanks to Cherniavsky Beni for the patch!
    836f5433
libglob.tex 1.79 KB