我有一些用例,在这些用例中,我需要运行生成器函数,而不关心生成的项

我目前正在使用一个简单的brew 函数来耗尽发电机的能量.

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

我想知道,是否有一种更简单的方法可以做到这一点,而我却错过了?

Edit

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)

取自consume种itertools配方

Python-3.x相关问答推荐

Numpy将3D数组的每个切片相乘以进行转置并对其求和

Python gpsd客户端

网站抓取:当我使用Chrome DevTools中的网络选项卡时,找不到正确的URL来提供我想要的数据

将字符串转换为python日期时间时出错

无法使用Python发送带有参数和标头的POST请求

CDKTF ec2 具有特定私有 IP 地址的娱乐

基于Pandas列动态创建分箱,以使观测值数量或计数占总计数的1%.

TypeError: issubclass() arg 1 在 Flask 中导入 langchain 时必须是一个类

使用条件参数为 super() 调用 __init__

Python多进程:运行一个类的多个实例,将所有子进程保留在内存中

pip 找不到最新的软件包版本

如何在 Python 中计算两个包含字符串的列表的 Jaccard 相似度?

AttributeError:LinearRegression 对象没有属性coef_

将行附加到 DataFrame 的最快和最有效的方法是什么?

如何等待 create_task() 创建的任务完成?

如何创建一个永远在其上运行滚动协程的事件循环?

有没有一种标准方法来确保 python 脚本将由 python2 而不是 python3 解释?

有效地判断一个元素是否在列表中至少出现 n 次

如何从Pandas 中的字符串中提取前8个字符

TypeError:无法将系列转换为