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()。

 

posted @ 2022-11-17 17:26  小鱼圆又圆  阅读(234)  评论(0)    收藏  举报