Python “的具体用例是什么?”;迭代器;?

Python “的具体用例是什么?”;迭代器;?,python,Python,我正在阅读,但为什么我们需要使用“迭代器”?如下所示,我们可以使用一个简单的列表和索引方法: 使用列表 输出: 输出: C:\Users\test\Desktop>python iterator.py C A. T 回溯(最近一次呼叫最后一次): 文件“iterator.py”,第36行,在 下一步打印(t) 停止迭代 C:\Users\test\Desktop> 在您的示例中,使用iterable和直接访问string对象之间实际上没有太大区别 Iterable是行为的更高抽象。例如,它可以是

我正在阅读,但为什么我们需要使用“迭代器”?如下所示,我们可以使用一个简单的
列表
和索引方法:

使用列表 输出: 输出:
C:\Users\test\Desktop>python iterator.py
C
A.
T
回溯(最近一次呼叫最后一次):
文件“iterator.py”,第36行,在
下一步打印(t)
停止迭代
C:\Users\test\Desktop>

在您的示例中,使用iterable和直接访问string对象之间实际上没有太大区别

Iterable是行为的更高抽象。例如,它可以是一个对象,仅在调用函数时才惰性地计算
next()
项。例如:

class Fibonacci(object):

    def __init__(self):
        self.x = 1
        self.y = 1

    def next(self):
        tmp = self.x
        self.x = self.y
        self.y = self.y + tmp
        return tmp


if "__main__" == __name__:
    fib = Fibonacci()
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next() 
    # ... and we can go like this for a long time...  
输出:

1
1
2
3
5
8
13
21

想知道为什么要使用迭代器吗?在Python2解释器中键入
range(10**12)
:PYes,通过一些简单的例子,您将看到几乎没有什么不同。但是对于大的(甚至无限的,这是完全可能的:
def demo():while True:yield True
)迭代器呢?当你有一个巨大的文件要读时,它们也非常有用,不会使你的计算机崩溃。@NightShadeQueen抱歉,我还是不清楚。为什么我们不能使用简单的“for循环”来读取文件内容。在这种情况下,迭代器将如何保护(防止计算机崩溃)?一个列表已完全存储在内存中。迭代器在被请求时返回值,并且只将自己的开销作为内存。要知道,一般的程序可能几乎不需要迭代器,而不是让您信服。当迭代器确实耗尽mem时,迭代器允许相同的列表行为减去mem使用。顺便说一句,将迭代器的结果(比如通过列表理解)分配给列表->右返回hi mem use。
s = 'cat'

t = iter(s)

print next(t)
print next(t)
print next(t)
print next(t)
C:\Users\test\Desktop>python iterator.py
c
a
t
Traceback (most recent call last):
  File "iterator.py", line 36, in <module>
    print next(t)
StopIteration

C:\Users\test\Desktop>
class Fibonacci(object):

    def __init__(self):
        self.x = 1
        self.y = 1

    def next(self):
        tmp = self.x
        self.x = self.y
        self.y = self.y + tmp
        return tmp


if "__main__" == __name__:
    fib = Fibonacci()
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next()        
    print fib.next() 
    # ... and we can go like this for a long time...  
1
1
2
3
5
8
13
21