Python生成器调用计数器不增加,除非调用yield

2024-09-30 04:37:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用scandir库来查找计算机上的所有文件。我想在检查完100条记录后停止循环。如果yield语句从未被调用,那么我的变量c永远不会增加,循环也不会停止。我放了一些假的文件名thisfilewontbefound,永远找不到,因此yield永远也找不到。为什么c不递增?你知道吗

from scandir import scandir, walk
import sys

def subdirs(path):
    for path, folders, files in walk(path):
        for files in scandir(path):
            if 'thisfilewontbefound' in files.path:
                yield files.path

c = 0
for i in subdirs('C:\\'):
    if c > 100:
        print "test over"
        sys.exit()
    c += 1
    print i

Tags: 文件pathinimportforif计算机sys
1条回答
网友
1楼 · 发布于 2024-09-30 04:37:18

您的for循环正在等待生成器。如果执行yield,生成器将仅生成值。但是yield永远不会执行,因为没有这样的文件,所以for循环将等待很长时间,直到C:驱动器上的所有文件都被扫描,并且生成器结束时不会产生任何结果。你知道吗

要么把计数器放在生成器中,要么不要过滤生成器中的文件,让它更频繁地生成。你知道吗

相关问题 更多 >

    热门问题