在Python中,“,=”是什么意思?

36

我想知道Python中的,=, =是什么意思?

来自matplotlib的示例:

plot1, = ax01.plot(t,yp1,'b-')

@ArnabDatta 不可以,那将是一个二元组。但你可以写成(plot1,) = ... 或者 [plot1] = ... - Veedrac
3个回答

43

这是元组解包的一种形式。使用括号:

(plot1,) = ax01.plot(t,yp1,'b-')

ax01.plot() 返回一个元素的元组,这个元素被赋值给 plot1。如果没有那个逗号(或者可能是括号),plot1 将会被赋值整个元组。下面的例子可以观察到 ab 之间的区别:

>>> def foo():
...     return (1,)
... 
>>> (a,) = foo()
>>> b = foo()
>>> a
1
>>> b
(1,)

您可以在 (a,)(1,) 中都省略括号,但为了清晰起见,我保留了它们。

这似乎是版本特定的。为了准确,您可以提到在Python 2.7中不可能实现(“ValueError:too many values to unpack”)。另外:为什么我不能 x,,,=(1,2,3,4) - Thomas Weller
3
1)上面的示例在Python 2.7中有效,该错误意味着您尝试解包的元组比左侧提供的变量数量大。 2)你不能这样做,因为它不是一个有效的语法。如果您只想保留第一个元素,则可以执行x,_,_,_ =(1,2,3,4),其中“_”是常规变量名称,通常用于表示“不关心此值”。无论如何,在这种情况下,我认为x = foo [0]更清晰易懂。 - Stefano Sanfilippo
2
在Python 3中,您可以执行x, *_ = (1,2,3,4) - AncientSwordRage

17

Python允许你在赋值语句的左侧放置元组。问题中的代码就是一个例子,它看起来像是这种操作符的特殊情况,但实际上只是进行了一次元组赋值。以下是一些示例:

a, b = (1, 2)

这将给您 a = 1b = 2

现在还有一个单元素元组的概念。

x = (3,)

给你x=(3,),这是一个只包含一个元素的元组。这个语法看起来有点奇怪,但是Python需要区分普通括号,所以它在末尾添加了逗号(例如z=(4)会将z赋值为整数4,而不是元组)。如果你想要提取这个元素,那么你可以使用问题中提到的方法:

y, = x

现在y等于3。请注意,这只是元组赋值,语法看起来有些奇怪,因为这是长度为一的元组。

参见此脚本示例:http://ideone.com/qroNcx


2
在一个变量后面加上逗号,,可以将其放入一个只包含单个元素的元组中。然后,这个元组被赋予从ax01.plot(t,yp1,'b-')返回的值(使用=运算符)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接