Python x、 =…-后面的逗号是逗号运算符吗?

Python x、 =…-后面的逗号是逗号运算符吗?,python,matplotlib,tuples,Python,Matplotlib,Tuples,我不明白变量行之后的逗号是什么意思,表示: 若我去掉逗号,变量“line”变成变量“line”,那个么程序就中断了。上面给出的url的完整代码: import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation fig = plt.figure() ax = fig.add_subplot(111) x = np.arange(0, 2*np.pi, 0.01)

我不明白变量行之后的逗号是什么意思,表示:

若我去掉逗号,变量“line”变成变量“line”,那个么程序就中断了。上面给出的url的完整代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()
ax = fig.add_subplot(111)

x = np.arange(0, 2*np.pi, 0.01)        # x-array
line, = ax.plot(x, np.sin(x))

def animate(i):
    line.set_ydata(np.sin(x+i/10.0))  # update the data
    return line,

#Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
    interval=25, blit=True)
plt.show()
根据逗号,after变量似乎与仅包含一项的元组相关。

ax.plot()
返回包含一个元素的元组。通过向赋值目标列表中添加逗号,您可以要求Python解包返回值,并依次将其分配给左侧命名的每个变量

通常情况下,您会看到这一点适用于具有多个返回值的函数:

base, ext = os.path.splitext(filename)
然而,左侧可以包含任意数量的元素,只要是元组或变量列表,就可以进行解包

在Python中,逗号构成元组:

>>> 1
1
>>> 1,
(1,)
括号在大多数位置是可选的。您可以使用括号重写原始代码,而无需更改其含义:

(line,) = ax.plot(x, np.sin(x))
或者也可以使用列表语法:

[line] = ax.plot(x, np.sin(x))
或者,您可以将其重铸为不使用元组解包的行:

line = ax.plot(x, np.sin(x))[0]

有关任务如何与解包相关的完整详细信息,请参阅文档。

如果您有

x, = y
解包长度为1的列表或元组。 e、 g

将导致
x==1
,而

x = [1]

给出
x==[1]

是的。如果有帮助,您可以将其视为等同于
line=ax.plot(x,np.sin(x))[0]
@Aya:除了
行之外,=…
语法将在右侧的iterable中有0个或多个元素时引发异常,而使用索引只会在有0个元素时引发异常。大约每年一次,我会将一行拆分,并在行尾缺少一个逗号,如
x=1,
。然后过了一段时间,我终于意识到为什么元组会出现在不应该出现的地方。请注意,
plt.plot
允许通过多种方式获取其参数。例如,
plot(x1,y1,'g^',x2,y2,'g-')
将返回一个包含两个
Line2D
元素的列表。为了保持一致性,当只有一个
Line2D
元素时,也会返回一个列表。最后一行一针见血。它假设您已经知道,当您在iterables之间进行赋值时,元素是对齐的。所以
x,y,z=1,2,3
是一种python式的书写方式
x=1;y=2;z=3
。我无法对下面的答案添加更多内容,但我想我应该添加一个简洁的结果:逗号运算符还使Python能够在一条表达清晰的行中切换变量值(见快速Python手册):
x2,x1=x1,x2
。可能重复
x, = y
x, = [1]
x = [1]