为什么不能在列表推导式中解压列表?

Max*_*man 3 python list-comprehension iterable-unpacking

SyntaxError在列表或生成器理解中使用时,带星号的表达式会引发。

我很好奇这背后的原因;它是一种实现选择还是存在阻止此操作的技术限制?

我发现了很多关于不允许解包迭代的上下文,但没有说明原因。

例子:

lis = [1, 2, 3, 4, 5]
listcomp = [*lis for i in range(3)]
Run Code Online (Sandbox Code Playgroud)

我想也许我可以用它来获得[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]结果,但它提高了

SyntaxError("Iterable unpacking 不能用于理解中")

Mis*_*agi 5

这是在PEP 448 - Additional Unpacking Generalizations 中提出的,但由于担心可读性而最终未被接受:

此 PEP 的早期迭代允许将列表、集合和字典推导式中的运算符解包为容器可迭代对象上的扁平运算符:[...]
这遇到了对可读性的强烈关注和温和支持的混合。为了不损害 PEP 中争议较少的方面,提案的其余部分没有接受这一点。

值得注意的是,不排除稍后添加此内容的可能性。

此 PEP 不包括列表、集合和字典推导式中的解包运算符,尽管这在未来的提案中并未被排除。