Python中的生成器,代表无限流
Generator in Python, representing infinite stream
我的代码如下:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x > len(li):
x = 0
else:
x += 1
我收到列表索引超出范围错误。我的代码出了什么问题?
测试差2。最高有效索引为len(li) - 1
,因此使用该索引后,需要重置为0
:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x == len(li) - 1:
x = 0
else:
x += 1
当您尝试访问 li[x]
而 x
等于或大于列表的大小时,它将抛出 OutOfRange
异常。
while True:
# if x==3 this will throw error
yield li[x]
if x > len(li):
x = 0
else:
x += 1
如果在 if
语句之后移动 yield
,错误将消失
while True:
# if x==3, the following statement will assign 0 value to x
# But you need to check with >= instead of >
if x >= len(li):
x = 0
else:
x += 1
yield li[x]
但你可以使用模运算符 (%) 来简化它
while True:
yield li[x % len(li)]
x += 1
我的代码如下:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x > len(li):
x = 0
else:
x += 1
我收到列表索引超出范围错误。我的代码出了什么问题?
测试差2。最高有效索引为len(li) - 1
,因此使用该索引后,需要重置为0
:
def infinite_loop():
li = ['a', 'b', 'c']
x = 0
while True:
yield li[x]
if x == len(li) - 1:
x = 0
else:
x += 1
当您尝试访问 li[x]
而 x
等于或大于列表的大小时,它将抛出 OutOfRange
异常。
while True:
# if x==3 this will throw error
yield li[x]
if x > len(li):
x = 0
else:
x += 1
如果在 if
语句之后移动 yield
,错误将消失
while True:
# if x==3, the following statement will assign 0 value to x
# But you need to check with >= instead of >
if x >= len(li):
x = 0
else:
x += 1
yield li[x]
但你可以使用模运算符 (%) 来简化它
while True:
yield li[x % len(li)]
x += 1