初识python: 生成器
生成器定义理解,直接上代码:
#!/user/bin env python # author:Simple-Sir # time:20181005 # 生成器 ''' # 列表生成式 a=[i for i in range(10)] print(a) def fun_add(a,b): return a+b b = [fun_add(i,j) for i in range(1,4) for j in range(4,7)] print(b) ''' ''' 生成器: 一边循环一边计算的机制,就叫生成器generator 循环一次,计算一次,不需要先循环完再计算。 生成器只有在调用时才会生成相应的数据, 只记录当前位置的值 只有一个__next__方法 :获取下一个位置的值 ''' ''' # 生成器方式一:列表生成式 a = (i*2 for i in range(10)) print(a.__next__()) ''' ''' # 生成器方式二:函数做生成器 # 斐波拉契数列,除了第一个和第二个外,任意一个数都由前两数相加得到。 def fblq(max): n,a,b=0,0,1 # n=0 # a=0 # b=1 while n<max: # print(b) yield b # 将函数变成生成器,想要返回的值加yield,yield是一个类似return 的关键字 a,b = b,a+b # 相当于 ==> # t = (b,a+b) -->(1,0+1) # a=t[0] -->1 # b=t[1] -->0+1 # 而不是 a=b,b=a+b n += 1 return '执行完成' #异常消息 f = fblq(10) print('打印第一个位置值',f.__next__()) print('打印下一个位置值',f.__next__()) print('打印下一个位置值',f.__next__()) print('开始循环打印') ''' ''' # 循环打印 for i in f: print(i) ''' ''' g = fblq(3) while True: try: x=next(g) print('g',x) except StopIteration as e: print('错误信息',e.value) break ''' ''' def scq_f(): for i in range(5): for j in range(5): k=i+j #print(k) yield k #关键点,将函数变成生成器,即将函数保持中断状态 return '错误信息' # f = scq_f() # for i in f: # print(i) f=scq_f() while True: try: x=next(f) # 即:f.__next__() print('f',x) except StopIteration as e: print('错误信息:',e.value) #获取scq_f的return值
break '''
世风之狡诈多端,到底忠厚人颠扑不破;
末俗以繁华相尚,终觉冷淡处趣味弥长。
posted on 2018-10-20 11:20 Simple-Sir 阅读(192) 评论(0) 编辑 收藏 举报