我有一些用例,在这些用例中,我需要运行生成器函数而不关心生成的项。
我不能使它们成为非泛型函数,因为在其他用例中,我肯定需要生成的值。
我目前正在使用一个自制的小功能来排气发电机。

def exhaust(generator):
     for _ in generator:
         pass

我想知道,是否有一种更简单的方法来做到这一点,而这正是我所缺少的?
编辑
遵循用例:
def create_tables(fail_silently=True):
    """Create the respective tables."""

    for model in MODELS:
        try:
            model.create_table(fail_silently=fail_silently)
        except Exception:
            yield (False, model)
        else:
            yield (True, model)

在某些情况下,我关心错误和成功的价值观…
for success, table in create_tables():
    if success:
        print('Creation of table {} succeeded.'.format(table))
    else:
        print('Creation of table {} failed.'.format(table), file=stderr)

……在有些情况下,我只想“盲目地”运行函数:
exhaust(create_tables())

最佳答案

为此设置for循环可能会相对昂贵,要记住python中的for循环基本上是简单赋值语句的连续执行;您将执行n(生成器中的项数)赋值,但之后会丢弃赋值目标。
相反,您可以将生成器馈送到零长度deque;以C速度消耗,不占用与list和其他实现迭代器/生成器的可调用的内存。

from collections import deque

def exhaust(generator):
    deque(generator, maxlen=0)

取自consumeitertools配方。

关于python - 运行发生器功能而无需关心项目的更简单方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47456631/

10-14 01:03