zoukankan      html  css  js  c++  java
  • 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---

        

  • 相关阅读:
    Qt与VC编程合作起龌龊
    谈谈误差补偿
    谈谈单片机编程入门方法
    小议设计模式
    创建VS工程使用神经网络库——FANN
    设计一个循环缓冲区模板
    旧文备份:FFTW介绍
    旧文备份:硬盘MBR引导记录损坏的一种修复方法
    How to disable the unused macros warning? --rust
    看阿里架构师是如何在高并发的情景下运筹帷幄
  • 原文地址:https://www.cnblogs.com/yupeng/p/3363992.html
Copyright © 2011-2022 走看看