python中的迭代器有啥用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中的迭代器有啥用相关的知识,希望对你有一定的参考价值。

什么是迭代
可以直接作用于for循环的对象统称为可迭代对象(Iterable)。
可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。
所有的Iterable均可以通过内置函数iter()来转变为Iterator。
对迭代器来讲,有一个__next ()就够了。在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的 next__()方法,直到监测到一个StopIteration异常。
>>> L = [1,2,3] >>> [x**2 for x in L] [1, 4, 9] >>> next(L) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'list' object is not an iterator >>> I=iter(L) >>> next(I) 1 >>> next(I) 2 >>> next(I) 3 >>> next(I) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
上面例子中,列表L可以被for进行循环但是不能被内置函数next()用来查找下一个值,所以L是Iterable。L通过iter进行包装后设为I,I可以被next()用来查找下一个值,所以I是Iterator。
参考技术A iamlaosong文
我们在用for
...
in
...语句循环时,in后面跟随的对象要求是可迭代对象,即可以直接作用于for循环的对象统称为可迭代对象(iterable),如list、tuple、dict、set、str等。
可迭代对象是实现了__iter__()方法的对象,而迭代器(iterator)则是实现了__iter__()和__next__()方法的对象,可以显示地获取下一个元素。这种可以被next调用并不断返回下一个值的对象称为迭代器。迭代器一定是可迭代对象,反过来则不一定成立。用iter()函数可以把list、dict、str等iterable变成iterator,例如:
bb=[x
for
x
in
range(10)]
cc=iter(bb)
cc.next()
循环变量的值其实可以看着是一次次用next取值的过程,每取一个值,做一次处理。list等对象用于循环实际上可以看着是用iter()方法产生一个迭代器,然后循环取值。
生成器(generator)就是一个能返回迭代器的函数,其实就是定义一个迭代算法,可以理解为一个特殊的迭代器。调用这个函数就得到一个迭代器,生成器中的yield相当于一个断点,执行到此返回一个值后暂停,从而实现next取值。

lambda 函数有啥用? [复制]

【中文标题】lambda 函数有啥用? [复制]【英文标题】:How are lambda functions useful? [duplicate]lambda 函数有什么用? [复制] 【发布时间】:2019-08-13 12:30:36 【问题描述】:

目前我正在学习 Python 3 中的 lambda 函数。 到目前为止,我对 lambda 函数的了解是,它是一个匿名函数,可以接受任意数量的参数,但只能包含一个表达式。

所以我的问题是,如果我们可以使用普通表达式来做同样的事情,为什么我们需要lambda 函数。我的意思是引入lambda函数的实际目的是什么?

【问题讨论】:

***.com/questions/16501/… 没有像 lambda 函数这样的东西。 lambda 表达式 是创建function 对象的一种方法。 Python 3 几乎没有 lambda 表达式。 operator.itemgetter 之类的东西旨在替代主要用例,正如您所注意到的,您无法用 lambda 表达式定义任何东西,而您也无法用 def 语句定义。但最终,他们被保留了下来。 【参考方案1】:

有时您需要一个非常简单的函数来一次性使用,例如作为参数传递给.sort() 告诉它如何进行排序。例如。如果你想对第二个元素的元组列表进行排序,

list_of_tuples.sort(key=lambda t: t[1])

相比非常简洁
def first_element(t):
    return t[1]

list_of_tuples(key=first_element)

仅此而已。

【讨论】:

【参考方案2】:

我很少使用随机函数,但我不喜欢引入命名函数只是为了在sort 中用作key。我更喜欢

lst = (('s', 5), ('b', 2), ('h', 3))
srt = sorted(lst, key=lambda x: x[1])

def sort_by(x):
    return x[1]

srt = sorted(lst, key=sort_by)

【讨论】:

以上是关于python中的迭代器有啥用的主要内容,如果未能解决你的问题,请参考以下文章

在这里使用迭代器有啥问题

通过引用传递 C++ 迭代器有啥问题?

python 生成器和迭代器有这篇就够了

python -- 迭代器

python三大器之迭代器

python生成器及迭代器