生成器表达式

生成器表达式(Generator Expressions), 是一个对象, 他执行的结果和以前学习的列表推导类似, 但会迭代的生成结果.

他的语法也与列表类似, 只是需要把以前的[]换成()

语法:

it = (express for iteme in iterator)
def foo(n):
    for i in range(1, n + 1):
        yield i

# foo(20)返回的迭代器生成一个新的迭代器
it = (x * x for x in foo(20))

for y in it:
    print(y)

生成器表达式和列表的差异

从写法上来看,生成器表达式使用(), 而列表用[]. 但是他们之间还是有很重要的差异.

他们的主要区别在于其中的元素(数据)的生成时间不同!

  1. 列表创建成功之后, 那么他里面的元素也已经创建成功, 而且是实实在在的占据着内存! 也就是说, 从物理上来看他们已经存在了.

  2. 而生成器表达式不一样, 仅仅是创建了一个生成器而已, 那些元素还没有创建. 只有当你使用for或者next()的时候才会根据需要来创建元素.

  3. 所以, 生成器不能可能有添加, 删除等这些方法.

  4. 如果数据量比较大的时候, 使用生成器表达式的性能要好于列表.

  5. 列表推倒只能生成列表, 而生成器表达式可以根据需要生成任何类型的序列.

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""