【发布时间】:2018-07-04 21:31:05
【问题描述】:
我惊讶地发现,在 Python 3 中,前两个没有任何问题:
>>> [] = ()
>>> () = ()
>>> {} = ()
File "<stdin>", line 1
SyntaxError: can't assign to literal
在 Python 2.7 中,只有第一个不会引发任何问题:
>>> [] = ()
>>> () = ()
File "<stdin>", line 1
SyntaxError: can't assign to ()
>>> {} = ()
File "<stdin>", line 1
SyntaxError: can't assign to literal
这里发生了什么?为什么其中任何一个都不会引发错误?为什么() = () 可能被添加为在 Python 3 中有效?
*注意,您可以将右侧替换为任何空的可迭代对象(例如[] = set()),我只是为插图选择了一个空元组
【问题讨论】:
-
我知道这是关于拆包的。然后我想,在 JavaScript 中这肯定是不可能的(那里称为解构)。我完全惊讶于
let [] = [];和({}) => 1这样的东西在 JS 中是有效的。 -
好问题,直到现在才意识到这是可能的
标签: python python-3.x python-2.7