x,= ... - 这个尾随逗号是逗号运算符吗?

时间:2021-08-23 23:39:41

I don't understand what does comma after variable lines, means: http://matplotlib.org/examples/animation/simple_anim.html

我不明白变量行后的逗号是什么,意思是:http://matplotlib.org/examples/animation/simple_anim.html

line, = ax.plot(x, np.sin(x))

If I remove comma and variable "line," becomes variable "line" then program is broken. Full code from url given above:

如果我删除逗号和变量“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()

According to http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences comma after variable seems to be related to tuples containing only one item.

根据http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences逗号后变量似乎与仅包含一个项目的元组有关。

2 个解决方案

#1


44  

ax.plot() returns a tuple with one element. By adding the comma to the assignment target list, you ask Python to unpack the return value and assign it to each variable named to the left in turn.

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

Most often, you see this being applied for functions with more than one return value:

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

base, ext = os.path.splitext(filename)

The left-hand side can, however, contain any number of elements, and provided it is a tuple or list of variables the unpacking will take place.

但是,左侧可以包含任意数量的元素,并且只要是解包将发生的元组或变量列表。

In Python, it's the comma that makes something a tuple:

在Python中,它是使逗号成为元组的逗号:

>>> 1
1
>>> 1,
(1,)

The parenthesis are optional in most locations. You could rewrite the original code with parenthesis without changing the meaning:

括号在大多数位置是可选的。您可以使用括号重写原始代码而不更改含义:

(line,) = ax.plot(x, np.sin(x))

Or you could use list syntax too:

或者您也可以使用列表语法:

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

Or, you could recast it to lines that do not use tuple unpacking:

或者,您可以将其重新编写为不使用元组解包的行:

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

or

lines = ax.plot(x, np.sin(x))

def animate(i):
    lines[0].set_ydata(np.sin(x+i/10.0))  # update the data
    return lines

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

For full details on how assignments work with respect to unpacking, see the Assignment Statements documentation.

有关分配如何在解包方面工作的完整详细信息,请参阅分配语句文档。

#2


16  

If you have

如果你有

x, = y

you unpack a list or tuple of length one. e.g.

你解压缩长度为一的列表或元组。例如

x, = [1]

will result in x == 1, while

将导致x == 1,而

x = [1]

gives x == [1]

给出x == [1]

#1


44  

ax.plot() returns a tuple with one element. By adding the comma to the assignment target list, you ask Python to unpack the return value and assign it to each variable named to the left in turn.

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

Most often, you see this being applied for functions with more than one return value:

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

base, ext = os.path.splitext(filename)

The left-hand side can, however, contain any number of elements, and provided it is a tuple or list of variables the unpacking will take place.

但是,左侧可以包含任意数量的元素,并且只要是解包将发生的元组或变量列表。

In Python, it's the comma that makes something a tuple:

在Python中,它是使逗号成为元组的逗号:

>>> 1
1
>>> 1,
(1,)

The parenthesis are optional in most locations. You could rewrite the original code with parenthesis without changing the meaning:

括号在大多数位置是可选的。您可以使用括号重写原始代码而不更改含义:

(line,) = ax.plot(x, np.sin(x))

Or you could use list syntax too:

或者您也可以使用列表语法:

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

Or, you could recast it to lines that do not use tuple unpacking:

或者,您可以将其重新编写为不使用元组解包的行:

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

or

lines = ax.plot(x, np.sin(x))

def animate(i):
    lines[0].set_ydata(np.sin(x+i/10.0))  # update the data
    return lines

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

For full details on how assignments work with respect to unpacking, see the Assignment Statements documentation.

有关分配如何在解包方面工作的完整详细信息,请参阅分配语句文档。

#2


16  

If you have

如果你有

x, = y

you unpack a list or tuple of length one. e.g.

你解压缩长度为一的列表或元组。例如

x, = [1]

will result in x == 1, while

将导致x == 1,而

x = [1]

gives x == [1]

给出x == [1]