繁体   English   中英

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

这是一个工作示例: https : //repl.it/@HarunYlmaz/python-generator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM