zoukankan      html  css  js  c++  java
  • Python:生成器表达式

    转于:http://www.cnblogs.com/liu-shuai/p/6098218.html

    博主:刘-帅

    简介:

      生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目"产生"(yield)出来。生成器表达式使用了"惰性计算"或称作"延时求值"的机制。

      序列过长,并且每次只需要获取一个元素时,应该考虑生成器表达式而不是列表解析。

    语法:

      (expression for iter_val in iterable)

      (expression for iter_val in iterable if cond_expr)

    实例展示:

    复制代码
     1 >>> N = (i**2 for i in range(1,11))
     2 >>> print N
     3 <generator object <genexpr> at 0x7fe4fd0e1c30>      #此处返回的是一个生成器的地址
     4 >>> N.next()
     5 1
     6 >>> N.next()
     7 4
     8 >>> N.next()
     9 9
    10 >>> N.next()
    11 16
    12 >>> N.next()
    13 25
    14 >>> N.next()
    15 36
    16 >>> N.next()
    17 49
    18 >>> N.next()
    19 64
    20 >>> N.next()
    21 81
    22 >>> N.next()
    23 100
    24 >>> N.next()                #所有元素遍历完后,抛出异常
    25 Traceback (most recent call last):
    26   File "<stdin>", line 1, in <module>
    27 StopIteration    
    复制代码
    复制代码
     1 >>> import os
     2 >>> F = (file for file in os.listdir('/var/log') if file.endswith('.log'))
     3 >>> print F
     4 <generator object <genexpr> at 0x7fe4fd0e1c80>
     5 >>> F.next()
     6 'anaconda.ifcfg.log'
     7 >>> F.next()
     8 'Xorg.0.log'
     9 >>> F.next()
    10 'anaconda.storage.log'
    11 >>> F.next()
    12 'Xorg.9.log'
    13 >>> F.next()
    14 'yum.log'
    复制代码
  • 相关阅读:
    跨页传值另一种方法
    运行nodejs的blog程序遇见问题
    nodejs和mongodb实践
    mongodb数据库实践笔记
    两次分页显示内容——先少后多显示
    Java进阶4表达式中的陷阱
    Java进阶3. 内存回收机制
    Java进阶1. Synchronized 关键字
    Java复习9网路编程
    Java复习8.多线程
  • 原文地址:https://www.cnblogs.com/volcao/p/8776815.html
Copyright © 2011-2022 走看看