###列表生成式 [ i * 2 for i in range(10) ] ##>>>输出是[0,2,4,6,8,10,12,14,16,18] ##也是也可以用于函数 [ func(i) for i in range(10) ] ###[ i * 2 for i in range(10) ] 的输出结果和: a = [] for i in range(10): a.append(i*2) ##的结果是一样的
生成器
###生成器的创建和列表生成式式差不多的,不一样的是列表生成式是用[],生成器的的创建是用()来创建的 ##比如: c=( i * 2 for i in range(100) ) ##这样就创建好了生成器 ##生成器的概念 1.生成器只有在调用时才会生成相应的数据,只记录当前的位置 2.只有c.__next__()取值,只有一个方法,而且只能一个一个的取,不能往会取值
###斐波那契数 def fid(max) n,a,b = 0,0,1 while n<max: print(b) a,b = b , a+b n += 1
renturn "done"
fid(100)
###斐波那契数生成式 def fib(max): n,a,b = 0,0,1 while n<max: yield b ###和上面的差别在这里 a,b = b , a+b fib= fib(100) print(fib.__next__()) print(fib.__next__())
生成器send()
def consumer(name) print("%s准备吃包子了"%name) while True: baozi = yield print("[%s]包子来了,[%s]吃吧"% (baozi,name)) c = consumer("Caicai") c.__next__()###只能调用,不能传值 c.send("韭菜")###通过send()向生成器中的yield传一个值进去