zoukankan      html  css  js  c++  java
  • python中的生成器

    什么是生成器?

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

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

    如何使用?

    首先看一个例子:

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

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

    递归生成器:

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

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

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

    首先看下:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    def simple_generator():
        yield 1
        print simple_generator
      
    def repeater(value):
        while True:
            new  = (yield value)
            if new is not None: value = new
    
     
    r = repeater(42)
    print r.next()
     
    print r.send('hello,world!')

    结果为:

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

    可以看出:

    1)生成器就是一函数

    2)生成器具有next方法

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

    ---end---

  • 相关阅读:
    Powershell分支条件
    Powershell基础
    初识PowerShell
    设计模式--策略模式
    设计模式--简单工程模式
    StandardWrapper
    Tomcat的安全性
    算法效率 简单的增长率 参照

    排序算法之 归并排序
  • 原文地址:https://www.cnblogs.com/duanxz/p/5424690.html
Copyright © 2011-2022 走看看