关于“解压缩”生成器的Python规则是什么?

拉斯·阿博特

这是一个简单的有界生成器。

def bounded_naturals(limit):
    num = 1
    while num <= limit:
        yield num
        num += 1

如果我写

bn_gen = bounded_naturals(3)

bn_gen 将是预期的生成器对象。

但是如果我写

(a, b, c) = bounded_naturals(3)

a,,bc分别为1、2和3。令我感到奇怪的是,因为代码中似乎没有任何内容要求生成器产生值。Python规范中是否有需要这种解释的地方?

如果我写得更惊人

bn_gen = (a, b, c) = bounded_naturals(3)

我得到两个结果!bn_gen将一台发电机的对象,和abc为1,2和3。我应该如何理解这是怎么回事?

最后,如果我写

(a, b) = bounded_naturals(3)

我得到: ValueError: too many values to unpack (expected 2).

如果编译器足够聪明,可以执行这些其他技巧,那么为什么在这种情况下仅向生成器询问所需的元素数量又不够聪明呢?

Python文档中是否有一节可以解释所有这些内容?

谢谢。

user2357112支持Monica

解压缩对任意可迭代对象(而不是序列)进行操作,并且它是通过迭代进行的。当你做

(a, b, c) = bounded_naturals(3)

你问的Python遍历bounded_naturals(3)和结果分配到abc


多项作业,例如

bn_gen = (a, b, c) = bounded_naturals(3)

通过从左到右(不是像其他语言从右到左)为每个分配目标分配RHS来工作首先将生成器分配给bn_gen,然后分配(a, b, c)请注意,拆箱会耗尽发电机的电量,因此反复进行操作bn_gen将一无所获。


当你做

(a, b) = bounded_naturals(3)

失败与Python不够聪明无关。Python不会默默地丢弃额外的值,因为那只会隐藏错误。可迭代对象必须提供与拆包请求一样多的元素。

请记住,仅仅因为某些代码可能具有非错误的含义,并不意味着就应该这样做


所有这些都记录在赋值语句docs中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中将数组元素解压缩为多个变量的规则是什么?

来自分类Dev

将Python生成器解压缩为参数-内存有效吗?

来自分类Dev

关于Python元组解压缩的说明

来自分类Dev

解压缩的泛化是什么?

来自分类常见问题

python生成器“发送”功能的目的是什么?

来自分类Dev

Python中非生成器的正确术语是什么?

来自分类Dev

关于何时返回类型是引用的规则是什么

来自分类Dev

关于此内联分配的c#规则是什么

来自分类Dev

解压缩时的加密损失是什么?

来自分类Dev

自动生成移动操作的规则是什么?

来自分类Dev

逐字段构造函数生成的规则是什么?

来自分类Dev

自动生成移动操作的规则是什么?

来自分类Dev

Python元组解压缩

来自分类Dev

Rebol / Red中关于自修改解析规则的规则是什么?

来自分类Dev

在Python中不使用from导入“ as”的规则是什么

来自分类Dev

Yeoman生成器中的“ {.tmp,app}”是什么?

来自分类Dev

EF 6中dbcontext生成器的用途是什么

来自分类Dev

在Ubuntu 12.04上解压缩文件的最简单方法是什么

来自分类Dev

解压缩具有许多目录的文件夹的预期行为是什么

来自分类Dev

Python中的结构和解压缩

来自分类Dev

在python中解压缩大列表

来自分类Dev

在Python中解压缩列表

来自分类Dev

使用python解压缩大文件

来自分类Dev

Python:解压缩Android备份?

来自分类Dev

Python tarfile不会解压缩

来自分类Dev

GDCM python DICOM解压缩

来自分类Dev

解压缩Python的类型注释

来自分类Dev

在Python中解压缩字典列表

来自分类Dev

用*列出解压缩python