生成式 和生成器

生成式

def f(n):
return n**3
a = [f(x) for x in range(10)] 这就是个简单的生成式
print(a) #[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
print(type(a))#<class 'list'>
b = ('ssss',88)
c,t=b
print(c,t)#ssss 88
生成器
s = (x for x in range(5))#不同于s=[x for x in range()]这是个生成式
print(s) #<generator object <genexpr> at 0x000000000222A848>生成器地址

print(next(s))#等价于print(s.__next__())这是python2能用的方法
print(next(s)) #这样可以逐个取出生成器里面的内容
print(next(s))
print(next(s))
print(next(s))
for i in s: #生成器就是一个可迭代对象Iterable 这是另一种取生成器的值方式
print(i)
生成器的另一种表达方式yield关键字
def foo():
print('ssss')
yield 1
print('ttt')
yield 2
# print(foo())#<generator object foo at 0x00000000021FA848>
g=foo()

# next(g) #ssss
# next(g) # ttt
for i in g: #for 循环后面加的是可迭代对象(能调用iter方法的都是可迭代对象如元组,列表,字典)
print(i) #ssss 1 ttt 2

猜你喜欢

转载自www.cnblogs.com/CIBud/p/11853579.html