You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法对Python的range()对象调用next()方法?

问题:为什么range对象能被for循环遍历却不是迭代器?

我正在熟悉Python生成器,尝试使用range()函数,它返回的range对象我原以为是生成器,因此执行以下代码:

a = range(10)
print(next(a))

但却出现报错:

TypeError: 'range' object is not an iterator

既然我可以通过for i in range(10)遍历它,为何提示它不是迭代器?

解答

核心原因是**可迭代对象(Iterable)和迭代器(Iterator)**是两个不同的概念:

  • 可迭代对象:只要实现了__iter__()方法,能返回一个迭代器的对象都属于这类,比如列表、字符串、range对象都在此列。
  • 迭代器:除了实现__iter__(),还必须实现__next__()方法,支持通过next()函数逐个取出元素,而且迭代器是一次性的,元素取完就耗尽了。

range对象是可迭代对象,但不是迭代器。当你用for循环遍历它时,Python会自动调用它的__iter__()方法,生成对应的迭代器,再用这个迭代器逐个获取元素,所以for循环能正常运行。

而直接调用next(a)时,因为range对象本身没有__next__()方法,自然会报错。如果要对range对象使用next(),需要先把它转换成迭代器:

a = iter(range(10))
print(next(a))  # 输出0

额外说明:生成器属于迭代器的一种,但range对象既不是生成器也不是迭代器,它是一种特殊的序列类型,能高效表示整数范围,不需要提前生成所有元素——这点和生成器类似,但本质上是不同的对象类型。

内容的提问来源于stack exchange,提问作者Simon Ernesto Cardenas Zarate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:02:23