使用 yield 语句的意外输出
unexpected output using yield statement
我现在阅读了 return 和 yield 语句之间的区别并理解了一切,当我应用一些测试时我遵循的教程说有 3 个选项我可以使用它来得到结果yield 其中之一是 next 方法,如您所知,要使用 next 方法,您应该多次添加它来手动创建它,我做的测试是:
第一种情况:
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print(i)
这里的预期结果是:
0
1
4
9
16
25
36
49
64
81
它按预期工作正常
第二种情况:
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print(next(sq))
所以,我没有多次打印 next(sq),而是将它放入一个循环中并使用了一次,所以它应该打印出与第一个函数相同的结果,但相反,它打印出该结果:
1
9
25
49
81
我 运行 调试但我不明白到底发生了什么
你在 for 循环中让步,然后立即用 next() 再次让步
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print("Before next: ", i)
print("After next: ", next(sq))
输出:
Before next: 0
After next: 1
Before next: 4
After next: 9
Before next: 16
After next: 25
Before next: 36
After next: 49
Before next: 64
After next: 81
代码 for i in sq:
连续迭代迭代器的每个值,但是在每次迭代时,您显式调用 next
来获取下一个,您忘记了 i
中的值并且继续,所以你在 2
上打印一个值
sq = getSquare(10)
for i in sq:
print("current ", i)
print("next: ", next(sq))
current 0
next: 1
current 4
next: 9
current 16
next: 25
current 36
next: 49
current 64
next: 81
要仅使用 next
在迭代器上移动,请像这样使用并包装一个 try
来处理 StopIteration
错误
sq = getSquare(10)
try:
while True:
i = next(sq)
print("current ", i)
except StopIteration:
print("End")
我现在阅读了 return 和 yield 语句之间的区别并理解了一切,当我应用一些测试时我遵循的教程说有 3 个选项我可以使用它来得到结果yield 其中之一是 next 方法,如您所知,要使用 next 方法,您应该多次添加它来手动创建它,我做的测试是:
第一种情况:
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print(i)
这里的预期结果是:
0
1
4
9
16
25
36
49
64
81
它按预期工作正常
第二种情况:
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print(next(sq))
所以,我没有多次打印 next(sq),而是将它放入一个循环中并使用了一次,所以它应该打印出与第一个函数相同的结果,但相反,它打印出该结果:
1
9
25
49
81
我 运行 调试但我不明白到底发生了什么
你在 for 循环中让步,然后立即用 next() 再次让步
def test(n):
yield n*n
def getSquare(n):
for i in range(n):
for x in test(i):
yield x
sq = getSquare(10)
for i in sq:
print("Before next: ", i)
print("After next: ", next(sq))
输出:
Before next: 0
After next: 1
Before next: 4
After next: 9
Before next: 16
After next: 25
Before next: 36
After next: 49
Before next: 64
After next: 81
代码 for i in sq:
连续迭代迭代器的每个值,但是在每次迭代时,您显式调用 next
来获取下一个,您忘记了 i
中的值并且继续,所以你在 2
sq = getSquare(10)
for i in sq:
print("current ", i)
print("next: ", next(sq))
current 0
next: 1
current 4
next: 9
current 16
next: 25
current 36
next: 49
current 64
next: 81
要仅使用 next
在迭代器上移动,请像这样使用并包装一个 try
来处理 StopIteration
错误
sq = getSquare(10)
try:
while True:
i = next(sq)
print("current ", i)
except StopIteration:
print("End")