美文网首页
生成器(特殊的迭代器)

生成器(特殊的迭代器)

作者: 超人不会飞_9664 | 来源:发表于2018-09-22 17:25 被阅读0次

生成器

所谓协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方·继续或者重新开始。

def myGen():
  print('生成器被执行')
  yield 1     #有yield语句就说明是生成器,yield本身相当于return
  yield 2
my =  myGen()
next(my)
生成器被执行
1
next(my)
2
next(my)
StopIteration
for i in muGen():
    print(i)
生成器被执行
1
2

从上面的代码就可以看出生成器的最大作用就是使函数可以保留现场,当下一次执行该函数是从上一次结束的地方开始,而不是重新开始。

def fibs():
  a = 0
  b = 1
  while True:
    a,b =b,a+b
    yield a
for each in fibs():
    if each > 100:
        break
    print(each,end= ' ')
1 1 2 3 5 8 13 21 34 55 89

python很多容器都有它的推导式,例如:
. 列表推导式

a = [i for i in range(10) if not (i % 2) and i % 3]
print(a)
print(type(a))

[2, 4, 8]
<class 'list'>

. 字典推导式

b = {i : i % 2 == 0 for i in range(10)}
print(b)
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}

. 集合推导式

c = {i for i in [1,1,2,3,4,5,5,6,7]}
print(c)
print(type(c))
{1, 2, 3, 4, 5, 6, 7}
<class 'set'>

. 元组推导式

e = (i for i in range(10))
print(e)
print(next(e))
print(next(e))
print(next(e))
<generator object <genexpr> at 0x0000029A64A62048>
0
1
2

问题来啦 generator就是生成器 那元组的推导式就系一个生成器,是不是好神奇!再上一道菜

a = sum((i for i in range(10) if i % 2 ))
print(a)
25
number = [1,5,2]
a = reversed(number)
print(a)
<list_reverseiterator object at 0x0000020DD73CB048>

可以看出reverse(seq)返回的是个逆向的生成器
我们可以写一个跟reversed功能相同的生成器

def new_Reverse(string):
    for index in range(len(string)-1,-1,-1):
        yield string[index]
a = new_Reverse('fishc')
for i in a:
    print(i,end = ' ')

所以生成器就是一个特殊的迭代器,生成后器只需要一个yield语句就行,但它内部会自动创建iter()和next()方法。

相关文章

  • yield and Iterator

    Generator(生成器) 生成器是特殊的迭代器,迭代器不一定是生成器。 生成器与迭代器均是可迭代对象。 目前学...

  • 协程,生成器,迭代器

    高频率切换 迭代器 自定义迭代器 生成器 特殊的迭代器

  • python 迭代器 生成器 可迭代

    生成器属于特殊的迭代器

  • Python生成器

    1 生成器概念 生成器是一个特殊的迭代器(迭代器的抽象层级更高)所以,生成器拥有迭代器的特性:1.惰性计算,节省内...

  • python の 可迭代、迭代器 、生成器

    生成器: 生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__ iter__和__ next __方法...

  • [开篇五:Python零散知识拾荒之生成器]2019-02-15

    生成器理解   生成器算得上是Python语言中最吸引人的特性之一,生成器其实是一种特殊的迭代器,不过这种迭代器更...

  • Python的基础知识之生成器

    一、概念 生成器(generator):一个特殊的迭代器,具有迭代器的所有的特性,为什么特殊?是因为在函数中包含了...

  • 2019-03-20

    1 迭代器和生成器 迭代器 获取数据:next (迭代器)、for 循环遍历 ,数据来源:转换、生成器 生成器:...

  • 生成器

    一、什么是生成器 一般的迭代器对象是需要有iter()和next()方法,而生成器是一种特殊的迭代器,表面上看是没...

  • Python基础(十三): 生成器

    一、生成器 是一个特殊的迭代器(迭代器的抽象层级更高) 拥有迭代器的特性惰性计算数据, 节省内存能够记录状态, 并...

网友评论

      本文标题:生成器(特殊的迭代器)

      本文链接:https://www.haomeiwen.com/subject/fpetoftx.html