多语言外贸企业网站源码,wordpress账号破解,用网站做的简历模板,品牌策划师一、生成器定义和作用
定义#xff1a;Python中#xff0c;一边循环一边计算的机制#xff0c;生成器对象也是迭代器对象#xff0c;支持for循环、next()方法…等。作用#xff1a;循环的过程中不断推算出后续的元素#xff0c;这样就不必创建完整的list#xff0c;从而…一、生成器定义和作用
定义Python中一边循环一边计算的机制生成器对象也是迭代器对象支持for循环、next()方法…等。作用循环的过程中不断推算出后续的元素这样就不必创建完整的list从而节省大量的空间
二、生成器创建方法
1、简单生成器将列表推导式的[ ]改为()
# 列表生成式
_list [i for i in range(10)]
print(type(_list)) # class list
print(_list) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成器
_generator (i for i in range(10))
print(type(_generator)) # class generator
print(_generator) # generator object genexpr at 0x7fbcd92c9ba0
# 生成器对象取值
print(f第一次迭代数据是{_generator.__next__()}) # 第一次迭代数据是0
print(f第二次迭代数据是{next(_generator)}) # 第二次迭代数据是1
# 注意从第三个元素开始了
for x in _generator: # for循环只能隐式的触发了StopIteration异常就终止迭代了但是在程序中不会显示出来print(x) # 234567892、函数对象生成器函数中使用yield关键字函数就变成了一个generator
yield和return语句使用方法类似但是普通函数运行到return语句则直接返回代码不再执行而生成器对象会运行到yield后返回再下次调用next()会从yield语句后继续执行。
def gen_generator():yield startfor i in range(2):yield iyield endgen gen_generator()
print(f从gen对象取到的第一个值为{next(gen)}) # 从gen对象取到的第一个值为start
print(f从gen对象取到的第二个值为{next(gen)}) # 从gen对象取到的第二个值为0
print(f从gen对象取到的第三个值为{next(gen)}) # 从gen对象取到的第三个值为1
print(f从gen对象取到的第四个值为{next(gen)}) # 从gen对象取到的第四个值为end
# print(f从gen对象取到的第五个值为{next(gen)}) # 抛出StopIteration异常# 等同于
gen2 (i for i in [start, 0, 1, end])
for v in gen2:print(v) 三、yield生成器高级应用
send()方法概念暂时保留先不进行等待需要时再进行。作用与next()作用相似。
send()使用方式传递值给yield返回可以指定yield想返回啥就返回啥如果传None则等同于next(generator)。
send()和next()区别 send(value)可以传递value给yield。next()不能传递特定的值只能传递None进去。
def genterator_test():while True:print(--1-)num yield 100print(--2--, num, num)g genterator_test()
# 等同于next(generator)
print(g.send(None)) # --1-# 100# 传递值给yield返回
print(g.send(11)) # --2-- num 11# --1-# 100# 传递值给yield返回
print(g.send(22)) # --2-- num 22# --1-# 100