這兩個代碼片段僅在列表構造方式上有所不同。一個使用[]
,另一個使用list()
。爲什麼這些生成器表達式的行爲有所不同?
這一次所消耗的迭代,然後提出了一個StopIteration
:
>>> try:
... iterable = iter(range(4))
... while True:
... print([next(iterable) for _ in range(2)])
... except StopIteration:
... pass
...
[0, 1]
[2, 3]
這一次所消耗的迭代和循環永遠打印空列表。
>>> try:
... iterable = iter(range(4))
... while True:
... print(list(next(iterable) for _ in range(2)))
... except StopIteration:
... pass
...
[0, 1]
[2, 3]
[]
[]
[]
etc.
這種行爲的規則是什麼?
http://stackoverflow.com/questions/16465313/how-yield-catches-stopiteration-exception –