我在列表推导中使用生成器,并且在其中一个生成器提前结束时获得了一些意外行为.为什么在列表推导之外创建生成器会导致行为发生变化?
我创建的生成器如下:
def inc_range(a,b):
for i in range(min(a,b), max(a,b) + 1):
yield i
Run Code Online (Sandbox Code Playgroud)
第一种呼叫方式如下:
[(i,j) for i in inc_range(1,3) for j in inc_range(4,6)]
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)
调用它的第二种方式如下:
a = inc_range(1,3)
b = inc_range(4,6)
[(i,j) for i in a for j in b]
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容:
[(1, 4), (1, 5), (1, 6)]
Run Code Online (Sandbox Code Playgroud)
试验一下,以下两个例子给了我第一个结果:
a = range(1,4)
b = range(4,7)
[(i,j) for i in a for j in …Run Code Online (Sandbox Code Playgroud)