一: list 生成式
#codeing:UTF-8 #__author__:Duke #date:2018/3/9/009 # list 生成器 a = [x for x in range(10)] print(a) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] a = [x*x for x in range(10)] print(a) #[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 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]
二:生成器
生成器共两种创建方法 # 一: 小括号法 a = (x*2 for x in range(10)) print(a) #a 为 generator(生成器) object print(next(a)) # == print(a.__next__()) print(next(a)) # == print(a.__next__()) #genator 只能一个一个的接着读 # # #生成器本来就是一个可迭代对象(iterable) for i in a: print(i) #二: 关键字法 def fun(): print("ok1") yield 1 #这是next 时的返回值 print("ok2") yield 2 a = fun() #此时的fun()是一个生成器对象,不在是一个函数,它不会执行函数中的内容, next(a) # 完成第一个yield 的内容 # print(next(a)) ## 完成第二个yield 的内容 ,先执行next(a) # 会打印OK2 ,并返回2 ,所以打印的 next(a)就是打印返回值2 #什么是可迭代对象? 对象有 iter 方法的对象就是迭代对象 #常见的有 list tuple dict set # a = set("a") # a.__iter__() def fib( num ): n,a,b = 0,0,1 while n<=num: print(b) a,b = b,a+b n= n+1 fib(6)
def fib( num ):
n,a,b = 0,0,1
while n<=num:
#print(b)
yield b #改用装饰器方法
a,b = b,a+b
n= n+1
for i in fib(6):
print(i)