Python iter用法 yield解释
用法简介
iter(a) 将所有类似列表的对象转换为生成器
iter(a,[b, ])用a作为函数不断调用,并每次生成器返回a的返回值,直到返回值为b为止(不会输出最后的b)。
生成器是什么?
就是一个range()那样的函数,能依次输出值。
yield关键字是什么?怎么用?
yield意即“抛出”,能中断当前的函数,将其后的变量临时输出;当同一个函数被再次调用时,从上一次的yield后面一行开始运行。
例子:
def asd():
c = 0
while c < 5:
yield c
c += 1
for i in asd():
print(i)
yield输出的值不能直接用等于号“=”来赋值,就像range(4)不能直接用等于号赋值给a一样:
a = range(4) # 反例 print(a)
这样只会得到一个完整的迭代器对象,这种情况可以用next函数让迭代器运行起来,获取下一个值:
a = range(4) print(a) for i in range(5): print(next(a)) # 也可以用a.__next__()函数
这里可以看到,它最后会报错:StopIteration,因为迭代器只有4次循环(range(4)),而调用了五次next函数,第五次调用next函数时已经结束迭代了。
当yield放在一个函数的循环中时,该函数就成为了一个生成器。
yield会用在哪里?(有何作用?)
yield关键字很少被用到,一般用于缩减程序内存的地方。因为yield的存在,函数每次只需要加载当次所需的数据,所以内存占用少,但这些地方一般有成熟的迭代器生成函数替代。
比如:
读取文件“xxx”时,
f = open('xxx') for i in f: print(i)
也能正常读取每一行。
文件对象f被当作迭代器调用时(即调用f.__next__()函数时)相当于调用一个函数用yield逐个抛出的f.readlines()。

浙公网安备 33010602011771号