x, = ... - 这个尾随逗号是逗号运算符吗?
- 2025-01-14 08:50:00
- admin 原创
- 92
问题描述:
我不明白变量后的逗号是什么lines
意思:http://matplotlib.org/examples/animation/simple_anim.html
line, = ax.plot(x, np.sin(x))
如果我删除逗号,程序就会崩溃。完整代码来自上面给出的 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()
根据http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences,变量后的逗号似乎与仅包含一个项目的元组有关。
解决方案 1:
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]
或者
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
有关赋值如何进行解包的完整详细信息,请参阅赋值语句文档。
解决方案 2:
如果你有
x, = y
你解开一个长度为 1 的列表或元组。例如
x, = [1]
将导致x == 1
,而
x = [1]
给出 x == [1]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD