迭代器和生成器

1.迭代
迭代:迭代是访问集合元素的一种方式,使用for循环遍历取值的过程叫做迭代,比如:使用for循环遍历列表获取值的过程
迭代器:迭代器是一个可以记住遍历的位置的对象。
迭代器对象:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
可迭代对象:使用for循环遍历取值的对象叫做可迭代对象, 比如:列表、元组、字典、集合、range、字符串
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
>>> list=[1,2,3,4]
>>> it = iter(list)    # 创建迭代器对象
>>> print (next(it))   # 输出迭代器的下一个元素
1
>>> print (next(it))
2

  

2.生成器

 

生成器:yield 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行

 

# return 和 yield的区别

 

# yield: 每次启动生成器都会返回一个值,多次启动可以返回多个值,也就是yield可以返回多个值

 

# return: 只能返回一次值,代码执行到return语句就停止迭代

 

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

 

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

 

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

 

调用一个生成器函数,返回的是一个迭代器对象。
 
以下实例使用 yield 实现斐波那契数列:
def fibonacci(num):
    a = 0
    b = 1

    # 记录生成fibonacci数字的下标
    current_index = 0

    while current_index < num:
        result = a
        a, b = b, a + b
        current_index += 1
        # 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
        yield result


fib = fibonacci(5)
# 遍历生成的数据
for value in fib:
    print(value)

  

 

posted @ 2020-05-31 18:31  浮云飘渺的狮子  阅读(132)  评论(0)    收藏  举报