python:生成器能否做到没有尽头?

因为在教程里见到这样一句话:'Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。''生成器generator总是iterator'然后我实验了一下g = ( x ** 2 for x in range(1::1))但是告知如图错误请问如果怎么制作出一个无限大的数据流的生成器呢?
最新回答
失约

2026-02-17 15:37:38

(x)range和生成器有些类似,但毕竟不是生成器。你可以使用type看他们的类型。

返回全体自然数的生成器如下:

#!/usr/bin/env python
# coding=utf-8

"""
Generator in python
"""

from __future__ import (absolute_import, division, print_function,
                        unicode_literals, with_statement)


def naturals_gen():
    i = 1
    while True:
        yield i
        i += 1


def main():
    print(type(xrange(10)))
    print(type(naturals_gen()))

    naturals = naturals_gen()
    for i in naturals:
        if i > 10:
            break
        print(i)


if __name__ == '__main__':
    main()

如果不加if和break,那就会一直循环打印所有正整数。


运行结果如下:

<type 'xrange'>
<type 'generator'>
1
2
3
4
5
6
7
8
9
10