了解序列拆包:为什么使用集合抛出“ SyntaxError:无法分配给文字”?

时间:2018-12-25 13:18:11

标签: python python-3.x

我是python初学者。我最近了解到列表和元组允许值分配。

Fatal Python error: Py_Initialize: unable to load the file system codec
  File "D:\Users\username\venv_name\lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\
                    ^
SyntaxError: invalid syntax

Current thread 0x0000d85c (most recent call first):

我无法理解此行为。为什么用set进行类似操作会出错。另外,字典也可以进行类似的操作? 请帮助和解释。

1 个答案:

答案 0 :(得分:1)

您在列表和元组中看到的行为称为可迭代解包,用于将任何序列中的值解包为变量(只要左侧有与正确-除非您使用extended iterable unpacking)。

给予

a = [1, 2, 3, 4]
b = (1, 2, 3, 4)
c = {1, 2, 3, 4}

以下是所有有效的操作:

e, f, g, h = a
# Equivalent to
# (e, f, g, h) = a
# Also equivalent to, but slightly different than
# [e, f, g, h] = a
w, x, y, z = b
p, q, r, s = c

但是,不支持集合的语法,因为它们没有任何固有的顺序(至少直到python3.6为止)。所以,

{p, q, r, s} = a

语法无效(SyntaxError: can't assign to literal,因为python's grammar specification不支持。