没有这样的操作员,这是工厂的正常运行赋值语句并附有目标清单。大多数人会使用不同的间距,a, = b
.
你正在看元组赋值(也叫拆包),并且左侧可以有多个元素。请记住,这是comma这使得表达式计算为元组,而不是括号。单目标形式没有更具体的名称。
左侧是一个只有一个元素的元组,a,
。然后右侧被解包,并且必须恰好包含一个元素,然后将其存储在a
。如果左侧有更多目标,则右侧必须具有匹配数量的元素:
>>> 1, # a tuple with one element
(1,)
>>> a, = 1, # assigning one value to the left-hand targets.
>>> a
1
>>> a, b = 1, # not enough elements
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
>>> a, b = 1, 2, 3 # the syntax requires an exact match, 3 is too many
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
>>> a, b = 1, 2 # two values assigned
>>> a
1
>>> b
2
分配给目标列表是分配运算符的一项正常且广泛使用的功能,即使不是每个人都意识到这可以与单元素元组作为目标一起使用。
该技术在处理 API 时经常使用,该 API 将always生成一个元组或一个列表,但您只期望一个值。一个典型的例子是数据库 API:
cursor.execute('SELECT id FROM TABLE WHERE condition LIMIT 1')
result_id, = cursor.fetchone()
数据库查询结果的每一行始终是一个序列,即使您只选择了一列。
这种技术没有“不那么晦涩难懂”的形式,不是。一旦你了解了它,你就不需要任何其他技术,它也不再晦涩难懂!