生成器

Posted python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器相关的知识,希望对你有一定的参考价值。

‘‘‘
什么是生成器:
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(不需__iter__方法了),所以生成器就是可迭代对象.

生成器在python中有2中表现形式:
1 生成器函数: 常规函数的定义,但是,使用yield语句而不是return语句返回结果,yield语句一次返回一个结果
在每个结果中间,挂起函数的状态,以便下一次在它离开的地方继续执行
2 生成器表达式: 列斯与列表推导,但是生成器返回按需产生金额过的一个对象,而不是一次构建一个结果列表
‘‘‘
#1 生成器函数表现形式:
def test():
    yield 1
    yield 2
    yield 3
g = test()
print(g)   #<generator object test at 0x04AAF150>  生成器
print(g.__next__())  #1
print(g.__next__())  #2
print(g.__next__())  #3

#2 生成器表达式表现形式:
t = (i for i in range(10))
print(t)  #<generator object <genexpr> at 0x04B4BC90>   生成器
print(t.__next__()) #0
print(t.__next__()) #1


#三元表达式,判断name等于abc?等于就返回yes 不等于就返回error
name = abc
ret = yes if name == abc else error
print(ret)

#列表解析:
r = [i for i in range(10)]
print(r)   #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

r = [i for i in range(10) if i > 6]  #列表解析中括号改成大括号就是生成器表达式了
print(r)    #[7, 8, 9]
#总结:
#1 列表解析中括号改成大括号就是生成器表达式了
#2 列表解析与生成器表达式都是一种遍历的编程方式,只不过生成器表达式更节省内存(因为没有生成数据,只是一个内存地址,需要时候在生成数据)
print(sum([i for i in range(100000000000000000)]))

以上是关于生成器的主要内容,如果未能解决你的问题,请参考以下文章

python 生成器:生成器基础生成器表达式

python 生成器:生成器基础生成器表达式

生成器和生成器表达式

Python-生成器

生成器 生成器函数

python列表生成器与生成器