python生成器

生成器

生成器是python特有的一个语法,包含yield 关键字的函数,当他被调用的时候,函数体中的代码不会被执行,而是返回一个迭代器。每次请求一个值,就会执行生成器中的代码,直到遇到一个yield或return语句。yield意味着生成一个值。return语句意味着生成器停止执行。
下面是一个简单的生成器

nested =   [[1,2],[3,4],[5]]
def flatten(nested):
     for sublist  in nested:
           for  element in sublist:
                   yield element

上述函数使用了双重循环,加上yield进行构造生成器的设置,yield 函数与return最大的区别在于,return语句返回一个值,而yield则是产生一个值,但是冻结他,函数停在那点等待被激活。函数被激活后从那一点开始执行。
下面是执行生成器来迭代所有的值

for num in flatten(nested):
      print num
1
2
3
4
5
list(flatten(nested))
[1,2,3,4,5]

递归生成器

def flatten(nested):
   try :
      for sublist  in nested:
          for element in flatten(sublist):
            yield element
   excepet TypeError:
          yield nested

其实生成器并非什么特殊的的魔法,他通过其他基本语句也能打到相同的目的,对于大多数生成器而言

yield some_expression

都·等价与

result.append(some_expression)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:邵正将 来源:PytLab 在python中生成器可以很方便的实现迭代协议。生成器通过生成器函数产生,生成器...
    PyChina阅读 1,594评论 0 6
  • Python列表生成式 列表推导式的一般语法 这种语法等价于以下代码 下面举一些列表推导式的栗子: Python中...
    So_ProbuING阅读 1,316评论 0 0
  • 1.迭代 在理解生成器之前,先理解迭代。 1.1 迭代 如果给定一个list或tuple,我们可以通过for循环来...
    XYZeroing阅读 860评论 1 3
  • 什么是生成器?通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包...
    youngkun阅读 354评论 0 0
  • 1.什么是生成器 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一...
    一只写程序的猿阅读 983评论 0 4