本文共 1234 字,大约阅读时间需要 4 分钟。
列表表达式回顾
# -*-coding:utf-8 -*-__date__ = '2018/3/5'__author__ = 'xiaojiaxin'__file_name__ = '生成器'#a1=[x*2 for x in range(10000000000)] #全部加载至内存,列表表达式
生成器创建的两种方法
a=(x*2 for x in range(5))print(a)#at 0x000000E29B512990>#里面没有值!!!!生成器只是一个对象
生成器执行的两种方法
#就比如说列表和元组等都是菜,想吃就直接吃,生成器只是一个厨师,他会做菜,但是你要吃哪道菜,他才会去加载那一道菜#第一种方法:使用内置方法print(a.__next__())#0print(a.__next__())#2print(a.__next__())#4#第二种方法:使用next()方法print(next(a)) #等价于Python2.x a.next()#6print(next(a))#8# print(next(a)) #报警:停止迭代# #StopIteration# print(next(a))#生成器就是一个可迭代对象(iteration迭代)
#for内部对b做了next()调用,之前的数据作为垃圾回收了#for循环检测是否还有数据,及时结束next()调用b=(x for x in range(10))for i in b: #for内部对b做了next()调用,之前的数据作为垃圾回收了 print(i) #for循环检测是否还有数据,及时结束next()调用
#生成器一共两种创建方式#第一种:(x for x in range(5))#第二种:yield
生成器函数与普通函数的区别
def foo(): print("haha") return 1foo()#hahaprint(foo()) #执行函数,并返回返回值#haha#1print(foo)#
def fou(): print("123") yield 2 #只要有yield就是生成器对象 print("456") yield 4fou()# #空表示没有执行fou()函数print(fou()) #不执行函数,不返回函数返回值#print(fou)# #fou()是一个生成器对象#有一个yield就只有一道菜,有多个yield就有多道菜next(fou()) #执行fou()生成器对象#123next(fou())
大家对内容有任何问题,欢迎留言,定在第一时间解答,谢谢大家!
转载于:https://blog.51cto.com/10777193/2092999