生成式 和生成器
生成式
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
生成器 send的用法
def bar():
print('okk')
count=yield 1
print(count)
yield 2
b = bar()
b.send(None) # ‘okk’ # 等价于next(b) 调用send之前必须调用send(None)
s = b.send('iiii') # count :iiii
print(s) #2