gpt4 book ai didi

python - ,= 运算符

转载 作者:太空宇宙 更新时间:2023-11-03 12:46:25 25 4
gpt4 key购买 nike

在查看一些 Python 代码时,我注意到类似 ,= 运算符的用法:

a ,= b

经过实验和非常仔细的检查 assignment statements syntax ,我开始意识到它实际上是“元组拆包”,左边是长度为1的元组a,,右边是集合b。所以在一个简单的例子中,它就像下面这样,但也适用于任何迭代器/生成器:

assert len(b)
a = b[0]

我很好奇这个技巧是否有名字,是否有任何不那么晦涩的技术可以达到相同的结果?

最佳答案

没有这样的运营商,这是工厂的正常运行assignment statement带有目标列表。大多数人会使用不同的间距,a, = b

您正在查看元组赋值(也称为拆包),左边可以有多个元素。请记住,使表达式计算为元组的是 逗号,而不是括号。单目标形式没有更具体的名称。

左边是一个只有一个元素的元组,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:

cursor.execute('SELECT id FROM TABLE WHERE condition LIMIT 1')
result_id, = cursor.fetchone()

数据库查询结果的每一行始终是一个序列,即使您只选择了一列也是如此。

没有“不太晦涩”的技术形式,没有。知道了就不需要其他的技术了,也不再晦涩难懂!

关于python - ,= 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com