python迭代器和生成器区别


本文摘自php中文网,作者(*-*)浩,侵删。

迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。

在后台 for 语句对容器对象调用 iter()函数,iter()是 python 的内置函数。iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next() 也是 python 的内置函数。在没有后续元素时,next()会抛出一个 StopIteration 异常。(推荐学习:Python视频教程)

1

2

3

4

5

# 随便定义一个list

listArray=[1,2,3]

# 使用iter()函数

iterName=iter(listArray)

print(iterName)

生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# 菲波那切数列

def Fib(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a + b

        n = n + 1

    return '亲!没有数据了...'

# 调用方法,生成出10个数来

f=Fib(10)

# 使用一个循环捕获最后return 返回的值,保存在异常StopIteration的value中

while  True:

    try:

        x=next(f)

        print("f:",x)

    except StopIteration as e:

        print("生成器最后的返回值是:",e.value)

        break

区别:

生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出 StopIteration 异常。

更多Python相关技术文章,请访问Python教程栏目进行学习!

以上就是python迭代器和生成器区别的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python for循环语句结构与用法实例(图)

Python调式知识详解

Python处理菜单消息操作示例

怎么用cmd运行Python

Python编程json格式的转换、else语句的活用和setdefault方法详解

Python如何调用c语言函数的使用详解

Python怎么隔一个字符输出

Python处理异常有哪些方式

Python实现超简单的视频对象提取功能

Python模拟分割大文件以及多线程处理的实现方法

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...