""" Python 当中的生成器""" """ 生成器表达式 生成器当中 三个方法:close,send,throw() Python 3有一个内置函数next(), 它通过调用其next ()方法从迭代器中检索下一个项目,或者通过 生成器对象检索下一个项目 """ """ 创建生成器对象的表达式:""" #表达式1 # tuple1 = (i for i in range(10)) # print(tuple1) # print(next(tuple1)) """ 返回生成器对象 <generator object <genexpr> at 0x01304E70> """ #表达式2 #生成器表达式 # def token(): # a = yield 11 # print(a) # b = yield 22 # print(b) #创建一个生成器对象 # a = token() # print(a) """ 返回结果<generator object token at 0x01B44E70>""" # a = token() """ 生成器中,send,close,throw方法: 方法1:throw 方法是在迭代的过程当中抛出异常信息, 相对于异常处理当中:raise IndexError """ # a.throw(IndexError) # print(next(a)) # print(next(a)) """ 方法2:close 方法,相对于迭代器,生成器,当中可以手动执行close 关闭的方法,来实现迭代终止的操作 如果使用close,则抛出异常StopIteration""" # a.close() # next(a) """ send 方法可以和生成器内部的数据进行交互.""" # def my_func(): # # print("=======START======") # values1 = yield 22 # print("===1===",values1) # values2 = yield 33 # print("===1===", values2) # values3 = yield 44 # print("===1===", values3) #创建一个生成器对象: # a = my_func() # print(next(a)) # print(next(a)) """ 此时我在进行下一步迭代的时候 打印values1 的属性返回的是空值 那么如果设置values1 的值呢,这个时候就需要用到send方法跟 生成器内部进行交互 =======START====== 22 ===1=== None 33 """ # a = my_func() # print(next(a)) # print(a.send("wuhan")) """此时可以看到 我send的wuhan其实是传给 my_func当中 的values1 变量 =======START====== 22 ===1=== wuhan 33 """ #第一种使用数据类型进行存储的时候,他是直接将数据存储 #在序列当中是实际占用内存的. # list1 = [i for i in range(50000)] # print(list1) #创建一个生成器,那么他是直接记录生成数据的规则,我需要 # 数据时可以通过迭代器next进行取值,不会占用实际的内存 tuple1 = (i for i in range(50000)) print(next(tuple1))
标签:迭代,python,生成器,send,next,print,close From: https://www.cnblogs.com/manxingsir/p/16832966.html