生成器
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)]))
以上是关于生成器的主要内容,如果未能解决你的问题,请参考以下文章