美文网首页
Python基础12-函数3(生成器)

Python基础12-函数3(生成器)

作者: Jacob_LJ | 来源:发表于2018-05-12 22:02 被阅读7次
Python基础-函数

生成器

1 概念

  • 是一个特殊的迭代器(迭代器的抽象层更高级)
  • 拥有迭代器的特性
    * 惰性计算数据,节省内存
    * 能够记录状态,并通过 next() 函数,访问下一个状态
    * 具备可迭代特性

2 创建方式

  • 生成器表达式
    * 把列表推导式的[] 修改成()
# 列表推导式格式
# l = [i for i in range(1, 10000000) if i % 2 == 0] # 会立即生成带内容列表

# 生成器 generator 推导式格式
l = (i for i in range(1, 10000000) if i % 2 == 0)

print(next(l))
print(next(l))
print(l.__next__()) # 等价与 调用 next(),同时带有状态记录

# 生成器是特殊迭代器,可以被 for in 进行迭代。
for i in l:
    print(i)
  • 生成器函数
    * 函数体中包含 yield 语句
    * 这个函数的执行结果就是生成器
# yied, 可以去阻断当前的函数执行, 然后, 当使用next()函数, 或者, __next__(), 
# 都会让函数继续执行, 然后, 当执行到下一个 yield语句的时候, 又会被暂停
def test():
    print("xxx")
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")

    yield 4
    print("d")

    yield 5
    print("e")

# 下面的 for 循环创建的 test 函数,等价于上面的 test 函数方式
# def test():
#     for i in range(1, 9):
#         yield i

g = test()
print(g) >>> 获取的g 就是一个生成器

print(next(g)) >>> xxx \n 1
print(next(g)) >>> a \n 2
print(next(g)) >>> b \n 3
print(next(g)) >>> c \n 4
print(next(g)) >>> error

3 产生数据方式

  • 生成器具备可迭代性
  • next()函数 等价于 生成器.next()
  • for in

4 send() 方法

  • send 方法有一个参数,指定的是上一次被挂起的 yield 语句的返回值
  • 相比于 .next(),可以额外的给 yield 语句传值
  • 注意,第一次调用 send 方法需要传入 None 参数
def test():
    print("xxx")
    res1 = yield 1 "ooo"
    print(res1)

    res2 = yield 2
    print(res2)

g = test()

print(g.__next__())
print(g.__next__())
print(g.send("ooo"))
print(g.send(None))
print(g.send(666))

5 关闭生成器

  • g.close()
  • 后续如果继续调用,会抛出 StopIteration异常提示
def test():
    yield 1
    print("a")

    yield 2
    print("b")

    yield 3
    print("c")

    return 10



g = test() # 创建生成器

print(g.__next__())
print(g.__next__())

g.close() # 关闭生成器

print(g.__next__())
print(g.__next__())

6 注意

  • 如果函数带有 return,进行迭代的时候会直接终止,抛出 StopIteration异常
  • 生成器只会遍历一次,想再次遍历,需要重新生成一次。

相关文章

  • Python基础12-函数3(生成器)

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

  • python 基础 05 生成器,列表推导式,次要的内置函数

    python 基础 05 1.生成器 2.列表推导式 3.生成器表达式 4.字典推导式与集合推导式 5.次要的内置函数

  • python练习(2)

    python学习的第二周,这周学习继续学习python基础,主要是生成器、函数式编程、模块。部分练习如下: 下周将...

  • 老男孩Python文章归纳-不全待补充

    Python学习之路 Day1-基础1 Day2-基础2 Day3-基础3 Day4-基础4 迭代器、生成器、装饰...

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • python生成器

    基础知识 生成器是python的一个特别特的特性,在许多场合都有重要应用。比如range函数产生的就是一个生成器。...

  • 生成器

    生成器 在python中,使用了yield的函数被称为生成器(generator)。生成器是一个返回迭代器的函数,...

  • python装饰器

    在python3中 迭代器 生成器 装饰器 理解比较难 1、装饰器本质上是一个python函数,它可以让其他函数在...

  • Python基础-函数

    Python基础-函数 1.函数定义 2.参数传值 3.内置函数

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

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

网友评论

      本文标题:Python基础12-函数3(生成器)

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