python三大神器===》生成器

1. 认识生成器

  利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。为了达到记录当前状态,并配合next()函数进行迭代使用,我们可以采用更简便的语法,即生成器(generator)。生成器是一类特殊的迭代器

2.如何创建一个生成器:

  生成器时一种特殊的迭代器,我们既然知道迭代器的创建方法,那么创建一个生成器也不是一件难事,首先我们先认识第一种生成器的创建的方法:

利用生成器推导式的方法创建一个生成器

  

# 第一种生成器创建方法
my_list = (x for x in range(10))

print(my_list)
print(next(my_list))
print(next(my_list))
print(next(my_list))

  执行结果

0
1
2

  怎么样这样方式创建一个生成器是不是特别简单呢?需要注意的是列表推导式是[ ]而生成器推导式是(),这一点不要搞错了。

3.利用生成器编写斐波那序数列

  我们已经知道了一种生成器的创建方法,接下来我们将通过创建生成器的第二种方法来创建一个斐波那序数列

  首先我们先了解下斐波那序数列,斐波那序数列定义了第一个数为0第二个为1,之后的每个数字都为前两个数字之和,简单来说就是类似与 0,1,1,2,3,5.......的数列

  

# 生成器的第二种创建方法
def dome(num):
    a = 0
    b = 1
    # 定义下标值
    iter_index = 0
    while iter_index < num:
        item = a
        a, b = b, a + b
        iter_index+=1
        # 返回自定义的值 ,yield xxx相当于一个暂停jian,下次接着从这里的下一行开始执行,和return有很大的区别
        send_values = yield item
        print(send_values)

test = dome(5)
values = next(test)
print(values)
values = next(test)
print(values)

  

原文地址:https://www.cnblogs.com/xuchuankun/p/9514545.html

时间: 2024-08-04 23:53:03

python三大神器===》生成器的相关文章

Python三大器之生成器

Python中三大器有迭代器,生成器,装饰器,本文主要讲述生成器.主要从生成器的概念,本质,以及yield关键字的使用执行过程. 本质:生成器是一类特殊的迭代器,使用了yield关键字的函数不再是函数,而是生成器.(使用了yield的函数就是生成器) 1.yield关键字有两点作用: 1.1 yield语句一次返回一个结果,保存当前运行状态(断点),然后暂停执行,挂起函数的状态,以便下次重它离开的地方继续执行,即将生成器(函数)挂起 1.2.将yield关键字后面表达式的值作为返回值返回,此时可

Python学习-39.Python中的生成器

先回顾列表解释 1 lista = range(10) 2 listb = [elem * elem for elem in lista] 那么listb就将会是0至9的二次方. 现在有这么一个需求,需要存储前10个斐波那契数到硬盘. 那么先写产生斐波那契数的函数: 1 def fib(max): 2 n,a,b = 0,0,1 3 while n < max: 4 print(b) 5 a,b = b,a + b 6 n+=1 这样就会打印出前max个斐波那契数了.接着我们再修改一下.(因为我

python中的生成器

python中的生成器其实就是一个特殊的迭代器,相比于每次迭代获取数据获得(通过next()函数)时生成元素,迭代的位置,数值返回等都需要我们设计.我们可以采用更加简洁的语法即生成器(generator). 通过列表生成式,我们可以直接创建一个列表.但是,如果我们说我们可能会通过算法根据前面的999999个数推出100w个数,但是我们此时只需要使用到前几个数,那么通过列表保存100w个数来备用就会用到巨大的空间.而我们却不一定会用到第100w个数,白白浪费了庞大的空间.因此我们就需要用到了生成器

python——迭代器、生成器、装饰器

迭代器 迭代器规则 迭代:重复做一些事很多次,就像在循环中那样. 不仅可以对字典和序列进行迭代,还可以对其他对象进行迭代:只要该对象实现了__iter__方法. __iter__方法会返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象.在调用next方法时,迭代器会返回他的下一个值.如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常. 注意:迭代器规则在3.0中有一些变化.在新的规则中,迭代器对象应

python迭代器、生成器和yield语句

http://blog.csdn.net/pipisorry/article/details/22107553 一.迭代器(iterator) 迭代器:是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration.任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开. 迭代器对象要求支持迭代

python高级之生成器&amp;迭代器

python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象(iterable):对象中含有__iter__()方法 迭代器(iterator):对象含有__next__()方法,并且迭代器也有__iter__()方法 生成器(generator):生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅 列表/集合/字典推导式(list,set,dict compreh

Python迭代器和生成器介绍

Python迭代器和生成器介绍 迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration. 在for循环中,Python将自动调用工厂函数iter()获得迭代器,自动调用next()获取元素,还完成了检查StopIteration异常的工作. 常用的几个内建数据结构tuple.list.set.dict都支持迭代器,字符串也可以使用迭代操作. 你也可以自己实现一个迭代器,如上所述,只

python中的生成器函数是如何工作的?

以下内容基于python3.4 1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函数且这个函数尚未返回时获取,可能通过inspect模块的currentframe()函数获取当前栈帧. 栈帧对象中的3个常用的属性: f_back : 调用栈的上一级栈帧 f_code: 栈帧对应的c f_locals: 用在当前栈帧时的局部变量; 比如: >>&g

(转)python基础学习-----生成器和迭代器

在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的,就要了解一下迭代器相关的知识了. 迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常. __iter__()和next()