我知道* Python中的-operator用于解包迭代,例如解压缩列表。
但是,在实践中,我们还使用* -operator来解压缩迭代器,但我还没有找到解释它的文档。
参见示例:
>>> a = [1,2,3]
>>> print(a)
[1, 2, 3]
解包迭代
>>> print(*a)
1,2,3
解压缩迭代器
>>> it = iter(a)
>>> print(*it)
1,2,3
答案 0 :(得分:0)
这是有效的,因为应用于迭代器的iter
返回相同的迭代器:
iterator.__iter__()
返回迭代器对象本身。这是 需要允许容器和迭代器一起使用 for和in。此方法对应于tp_iter槽 Python / C API中Python对象的类型结构。
在表达式列表中使用对象已导致创建迭代器。因此func(*iter(foo))
与func(*foo)
具有相同的效果,假设已经正确实现了可迭代/迭代器协议。
答案 1 :(得分:0)
星号*
是可迭代的拆包运算符
Iterable是一个对象,可以对其进行迭代。它产生一个 传递给iter()方法的迭代器。迭代器是一个对象,它是 用于使用 next ()方法在可迭代对象上进行迭代。 迭代器具有 next ()方法,该方法将返回 对象。
请注意,每个迭代器也是可迭代的,但不是每个可迭代的 是一个迭代器。
(来自geeksforgeeks)
在您的示例中,迭代器是可迭代的,因此您可以应用*
可迭代的拆包运算符
您可以浏览PEP 484