gpt4 book ai didi

Python 如何部分使用可迭代生成器(没有 `next` )?

转载 作者:行者123 更新时间:2023-12-04 08:35:07 24 4
gpt4 key购买 nike

我有一个类充当可迭代生成器(根据 Best way to receive the 'return' value from a python generator ),我想用 for 部分使用它循环。
我不能用 next (比如 Python -- consuming one generator inside various consumers )因为第一次部分消费使用了一个只接受迭代器的库。如何从库函数停止的地方继续使用生成器?
(相关:Pause Python GeneratorIs there a way to 'pause' or partially consume a generator in Python, then resume consumption later where left off?)

class gen(): # https://stackoverflow.com/q/34073370
def __iter__(self):
for i in range(20):
yield i

# I want to partially consume in the first loop and finish in the second
my_gen_2 = gen()
for i in my_gen_2: # imagine this is the internal implementation of the library function
print(i)
if i > 10: # the real break condition is when iterfzf recieves user input
break

for i in my_gen_2: # i'd like to process the remaining elements instead of starting over
print('p2', i)

# the confusion boils down to this
my_gen = gen()
for i in my_gen:
print(i) # prints 1 through 20 as expected
for i in my_gen:
print('part two', i) # prints something, even though the generator should have been "consumed"?

最佳答案

每次在循环中迭代生成器时,都会得到一个新的迭代器。
例如:

class gen(): # https://stackoverflow.com/q/34073370
def __init__(self):
self.count = 0
def __iter__(self):
self.count += 1
print("Hallo iter {0}".format(self.count))
yield self.count

my_gen = gen()
>>> for i in my_gen:
... pass
Hallo iter 1
>>> for i in my_gen:
... pass
Hallo iter 2
如果你想使用旧的迭代器,只需使用 gen().__iter__()
>>> my_gen = gen().__iter__()
>>> for i in my_gen:
... pass
Hallo iter 1
>>> for i in my_gen:
... pass

关于Python 如何部分使用可迭代生成器(没有 `next` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64837827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com