Python解包迭代器

时间:2018-06-15 15:42:12

标签: python iterator

我知道* 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

2 个答案:

答案 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