このようなジェネレータ式:
my_nums = (item for item in [1, 2, 3, 4, 5, 6, 7])
はこのような何かのための構文糖である:
def generator(iterable):
for item in iterable:
yield item
my_nums = generator([1, 2, 3, 4, 5, 6, 7])
forloop自体がこのようなものに相当します。
while True:
try:
item = next(my_nums)
except StopIteration:
break
else:
print(item)
01以降問題は、発電機の過剰発現あなたがループ初めて、それが排出されるということです
gg = []
for item in my_nums:
gg.append(item)
:のようなものです。もう一度ループすると、StopIteration
が発生し、ループが解除されます。例えば
:
>>> my_nums = (i for i in [1, 2])
>>> list(my_nums)
[1, 2]
>>> list(my_nums)
[]
>>> next(my_nums)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
あなたはlist(my_nums)
を呼んで二回目は、それが空のリストを返す方法を参照してください?これは、発電機が使い尽くされたためです。そこから次のアイテムを取得しようとすると、それがどのように発生するのかを見ることができます。StopIteration
お手数ですが、ありがとうございます! –