首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python解包迭代器

Python解包迭代器
EN

Stack Overflow用户
提问于 2018-06-15 15:42:11
回答 2查看 5.6K关注 0票数 6

我知道Python中的*操作符用于解压缩可迭代性,例如解压缩列表。

然而,在实践中,我们也使用*操作符来解压迭代器,但是我还没有找到解释它的文档。

见示例:

代码语言:javascript
运行
复制
>>> a = [1,2,3]
>>> print(a)
[1, 2, 3]

可解包迭代

代码语言:javascript
运行
复制
>>> print(*a)
1,2,3

解包迭代器

代码语言:javascript
运行
复制
>>> it = iter(a)
>>> print(*it)
1,2,3
EN

回答 2

Stack Overflow用户

发布于 2019-09-19 13:21:56

星号*是可迭代的解包装运算符。

Iterable是一个可以迭代的对象。它在传递给iter()方法时生成一个Iterator。Iterator是一个对象,它用于使用next()方法迭代可迭代对象。迭代器具有 next ()方法,该方法返回对象的下一项。 注意,每个迭代器也是可迭代的,但不是每个迭代器都是迭代器。

(来自极客健忘)

在您的示例中,您的迭代器是可迭代的,因此您可以应用*可迭代解压缩运算符。

你可以看看佩普448

票数 3
EN

Stack Overflow用户

发布于 2018-06-15 16:03:01

这是因为应用于迭代器的iter返回相同的迭代器:

iterator.__iter__() 返回迭代器对象本身。这是允许容器和迭代器与for和in语句一起使用的必要条件。此方法对应于Python中的Python类型结构的tp_iter槽。

在表达式列表中使用对象已经导致了迭代器的创建。因此,假设迭代/迭代器协议已经正确实现,func(*iter(foo))具有与func(*foo)相同的效果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50878860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档