美文网首页
python08-生成器 & 迭代器

python08-生成器 & 迭代器

作者: AndroidCat | 来源:发表于2017-05-09 10:35 被阅读0次

生成器

  • python2.7中rang()和xrang()都表示生成一定范围的值
    • rang()会返回一个集合,值一次性创建出来
    • xrang()会返回一个生成器,里面没有值,当迭代的时候才逐个创建,节省内存
  • 生成器:具有生成某个东西的能力,在需要用到的时候才创建
def myrang():
    print('1')
    yield 1
    print('2')
    yield 2
    print('3')
    yield 3

ret = myrang()
print(ret) # <generator object myrang at 0x10217a8e0>

r1 = ret.__next__()
print(r1)
r2 = ret.__next__()
print(r2)
r3 = ret.__next__()
print(r3)
r4 = ret.__next__() # 报错
print(r4)
  • 生成器函数 & 生成器
    • 当函数中含有关键字yield(生成)时,该函数为生成器函数
    • 执行生成器函数,函数内部代码不会执行,会返回一个生成器
    • 当生成器调用__next__()会执行一下,有多少个yield,就可以执行多少次__next__(),如果__next__()次数超过yield个数,则报错
    • 当函数题内部遇到return,则return后面的代码不会再执行,即使还有yield
  • 自定义xrang(2.7)|rang(3.x)
def myrang(num):
    cur = 0
    while True:
        if num <= cur:
            return
        yield cur
        cur += 1

迭代器

  • 生成器具有生成某个东西的能力,但是如果不去调用__next__()函数,则不会生成值
  • 如果要把生成器中的内容拿出来可要用到迭代器
  • 迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件
it = iter([1,2,3,4,5])
ret = it.__next__()
print(ret)
ret = it.__next__()
print(ret)
b = it.__next__()
print(b)
  • 通过for循环可以帮我们实现迭代,同时自动判断是否还有__next__()

相关文章

  • python08-生成器 & 迭代器

    生成器 python2.7中rang()和xrang()都表示生成一定范围的值rang()会返回一个集合,值一次性...

  • 2019-03-20

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

  • yield and Iterator

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

  • 14. Python之迭代器(iterator)和生成器(gen

    1 什么是迭代器 2 为何要有迭代器 3 如何用迭代器 4 生成器 生成器应用案例

  • 第014篇:三大神器之生成器

    Python的三大神器:装饰器、迭代器、生成器 1、生成器 1.1、什么是生成器 生成器就是迭代器的一种;生成器作...

  • ES6 ES7 语法特性与规范

    生成器函数 说生成器之前先讲迭代器,下面就是迭代器的简单范例,迭代器代表一个流程,迭代器的每次next()调用,会...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 迭代器

    可迭代对象(Iterable): for迭代器(Iterator): for + next生成器属于迭代器。 验...

  • Python :生成器、迭代器、装饰器、递归函数与正则表达式

    Python 第四篇:生成器、迭代器、装饰器、递归函数与正则表达式 Python迭代器和生成器 Python 迭代...

  • Python生成器

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

网友评论

      本文标题:python08-生成器 & 迭代器

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