gpt4 book ai didi

python - 为什么 len() 不支持迭代器?

转载 作者:太空狗 更新时间:2023-10-29 22:04:18 24 4
gpt4 key购买 nike

许多 Python 的内置函数(any()all()sum() 等等)都接受迭代,但是为什么 len() 没有?

人们总是可以使用 sum(1 for i in iterable) 作为等价物,但为什么 len() 一开始不采用 iterables?

最佳答案

许多可迭代对象是由没有明确定义的 len 的生成器表达式定义的。采取以下永远迭代的方式:

def sequence(i=0):
while True:
i+=1
yield i

基本上,要有明确定义的长度,您需要预先知道整个对象。将其与 sum 之类的函数进行对比。您无需立即了解整个对象即可对其求和 - 只需一次取一个元素并将其添加到您已经求和的内容中即可。

小心像 sum(1 for i in iterable) 这样的习语,通常它只会耗尽 iterable,所以你不能再使用它了。或者,如果涉及大量计算,获取第 i 个元素的速度可能会很慢。可能值得问问自己为什么需要先验知道长度。这可能会让您深入了解要使用的数据结构类型(通常 listtuple 工作得很好)——或者您可能无需执行操作需要调用 len

关于python - 为什么 len() 不支持迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com