Python是否允许递归的__iter__函数?

eri*_*krf 4 python recursion iterator generator

我正在尝试编写一个__iter__应该递归遍历目录的函数(包括子目录),并且由于它的结构是任意的,我认为递归函数是可行的.但它没有用.

这就是我所拥有的:

class Dummy(object):

    def __init__(self, directory):
        self.directory = directory

    def _iterate_on_dir(self, path):
        '''
        Internal helper recursive function.
        '''
        for filename in os.listdir(path):
            full_path = os.path.join(path, filename)
            if os.path.isdir(full_path):
                self._iterate_on_dir(full_path)
            else:
                yield full_path

    def __iter__(self):
        '''
        Yield filenames
        '''
        return self._iterate_on_dir(self.directory)
Run Code Online (Sandbox Code Playgroud)

一些print陈述告诉我,递归调用只是被忽略了.

我怎么能做到这一点?

tza*_*man 5

现在当你递归地调用_iterate_on_dir你只是创建一个生成器对象时,实际上并没有迭代它.

修复:self._iterate_on_dir(full_path) 应该成为:

for thing in self._iterate_on_dir(full_path):
    yield thing
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Python 3,则可以将其替换为:

yield from self._iterate_on_dir(full_path)
Run Code Online (Sandbox Code Playgroud)