下面的代码让我大吃一惊。我希望我可以编写一个可能充当或不充当生成器的函数。
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/