• python中的生成器


    什么是生成器?

      生成器是一个包含了特殊关键字yield的函数。当被调用的时候,生成器函数返回一个生成器。可以使用send,throw,close方法让生成器和外界交互。

    生成器也是迭代器,但是它不仅仅是迭代器,拥有next方法并且行为和迭代器完全相同。所以生成器也可以用于python的循环中,

    如何使用?

    首先看一个例子:

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 def flatten(nested):
     5     for sublist in nested:
     6         for element in sublist:
     7             yield element
     8 
     9 nested = [[1,2],[3,4],[5,6]]
    10 
    11 for num in flatten(nested):
    12     print num,

    结果为1,2,3,4,5,6

    递归生成器:

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 def flatten(nested):
     5     try:
     6         for sublist in nested:
     7             for element in flatten(sublist):
     8                 yield  element
     9     except TypeError:
    10         yield nested
    11 
    12 for num in flatten([[1,2,3],2,4,[5,[6],7]]):
    13     print num

    结果为:1 2 3 2 4 5 6 7

    让我们一起来看看生成器的本质

    首先看下:

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 def simple_generator():
     5     yield 1
     6 
     7 print simple_generator
     8 
     9 def repeater(value):
    10     while True:
    11         new  = (yield value)
    12         if new is not None: value = new
    13 
    14 
    15 r = repeater(42)
    16 print r.next()
    17 
    18 print r.send('hello,world!')

    结果为:

    <function simple_generator at 0x10c76f6e0>
    42
    hello,world!

    可以看出:

    1)生成器就是一函数

    2)生成器具有next方法

    3)生成器可以使用send 方法和外界交互。

    ---end---

        

  • 相关阅读:
    env文件的作用
    Ubuntu 卸载wine
    Linux配置yaf3.x.x环境
    yaf中使用Cli模式,也就是定时器
    Yaf 在Bootstrap中注册变量,然后在其他地方进行使用!
    yaf 查看配置
    yaf配置通用函数
    一个严谨的接口调用
    后台基础表
    tensorflow环境搭建
  • 原文地址:https://www.cnblogs.com/yupeng/p/3363992.html
Copyright © 2020-2023  润新知