例如,如果我做了如下事情:

def test():
    yield from range(100)
testing = test()
iter(testing)

如果iter函数返回一个迭代器,但函数调用的结果没有分配给变量,为什么运行print(list(testing))或类似的函数会返回所有值?我以为改装发电机会消耗里面的东西.

推荐答案

简短回答

不,iter()函数不使用迭代器;相反,它返回的迭代器保持不变.

注释代码

以下是所有对象的名称及其作用:

def test():                  # generator creation function
    yield from range(100)

testing = test()             # generator/iterator object

t2 = iter(testing)           # t2 and testing are identical

list(testing)                # runs the iterator to exhaustion

list(testing)                # this time you get an empty list

解释

生成器对象是一种迭代器.他们只向前跑一次.调用next(it)将检索一个值并使迭代器前进.调用iter(it)返回相同的迭代器.要创建一个新的迭代器,只需再次调用生成器创建函数:testing2 = test().

Python相关问答推荐

查找两极rame中组之间的所有差异

按列分区,按另一列排序

如何找到满足各组口罩条件的第一行?

什么相当于pytorch中的numpy累积ufunc

如何制作10,000年及以后的日期时间对象?

计算组中唯一值的数量

如何获得每个组的时间戳差异?

OR—Tools中CP—SAT求解器的IntVar设置值

如何让这个星型模式在Python中只使用一个for循环?

如何设置视频语言时上传到YouTube与Python API客户端

使用groupby方法移除公共子字符串

Flask Jinja2如果语句总是计算为false&

Python pint将1/华氏度转换为1/摄氏度°°

如何将泛型类类型与函数返回类型结合使用?

Python如何导入类的实例

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

#将多条一维曲线计算成其二维数组(图像)表示

判断字典中是否有多个值对

如何从NumPy数组中提取主频?

达到最大的Python Webhost资源