python - 有时我想要一个发电机

标签 python generator yield

下面的代码让我大吃一惊。我希望我可以编写一个可能充当或不充当生成器的函数。

def mayGen(limit=5, asGenerator=False):
    result = []
    for i in range(1, limit + 1):
        n = i * i
        if asGenerator:
            yield n
        else:
            result.append(n)
    return result

print(mayGen(5, False))

for x in mayGen(5, True):
    print(x)

但是不,这个程序的输出是

<generator object mayGen at 0x7fa57b6ea7b0>
1
4
9
16
25

使用 asGenerator=False 调用 mayGen 根本无用。看来,仅仅yield 语句的存在,无论它是否被执行,都会从根本上改变包含函数的行为。

如果 mayGen 实际上又大又复杂,我希望我可以要求它充当生成器,或者将其计算输出写入文件,那又怎么样?这里有一条人迹罕至的小路吗?人们如何处理此类事情?

最佳答案

只需编写一个生成器即可。您始终可以获取它的输出并对其执行任何您想要的操作:将其放入列表中,将其写入文件等。尽管如此,如果您要经常使用它,您可能需要编写一个包装函数来为你做这件事,例如:

def willGen(limit=5):
    for i in range(1, limit+1):
        n = i * i
        yield n

def willReturnList(*args, **kwargs):
    return list(willGen(*args, **kwargs))

关于python - 有时我想要一个发电机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73131211/

相关文章:

java - Java 13 中的新关键字 "yield"是什么意思?

python - 读取带有合并单元格标题的 Excel 文件时修复 DataFrame 列

python - 使用 Python 将 JSON 转换为 CSV 问题

python - For 循环似乎比 NumPy/SciPy 3D 插值更快

python - 如何在Python中调用多个生成器

c# - 这个带有 "yield"的函数如何详细工作?

python - 解析 PDF 文档中的表格

javascript - 每次刷新页面时,如何将 JavaScript 文件中数组中的随机图像加载到 HTML 中?

javascript - ES6 中的生成器

python - 使用带有生成器函数的 python 多处理模块时出错。