我想知道"的含义">之后的"strong>";行"。
line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker)
这对代码来说似乎很重要。如果没有"我的代码崩溃了。错误是";AttributeError:"list"对象没有属性"get_xdata">
from matplotlib import pyplot as plt
import numpy as np
class PointBuilder:
def __init__(self, line):
self.line = line
self.xs = list(line.get_xdata())
self.ys = list(line.get_ydata())
self.cid = line.figure.canvas.mpl_connect('pick_event', self)
def __call__(self, event):
print('click', event)
ind = event.ind[0]
self.xs.remove(self.xs[ind])
self.ys.remove(self.ys[ind])
self.line.set_data(self.xs, self.ys)
self.line.figure.canvas.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click to build line segments')
line = ax.plot(demag_data["X corr"], demag_data['Y corr']*-1, 'o',color='tab:blue', picker=5)
linebuilder = PointBuilder(line)
plt.show()
简介:打开列表:
lst = [1, 2, 3]
first, second, third = lst # first == 1, second == 2, third == 3; "unpacking" a list
lst = [1, 2]
first, second = lst # first == 1, second == 2
list = [1]
first, = lst # first == 1
first = lst # first == [1] # not the same as previous
ax.plot()
返回表示绘制数据的Line2D对象的列表。
所以,在命令之后
line = ax.plot(...)
您将在line
变量中有一个列表(只有一个元素(,但您需要这个元素,而不是列表。
您可以在此命令之后执行line = line[0]
,但line, = ax.plot(...)
更好(更像Python(。
这可能是确保函数返回一个不可迭代对象或只返回一个元素的可迭代对象的功能。这里有一个例子:
def func():
return 1, 2, 3
a, b, c = func()
这很好用。现在考虑以下示例:
a = func()
这个fork也很好,但a
现在是一个收集所有输出的元组。print(a)
的输出是(1, 2, 3)
。让我们添加逗号:
a, = func()
这不起作用,它给出了一个错误:
ValueError: too many values to unpack (expected 1)
但是当我们改变函数使其输出单个对象时
def func():
return 1
或
def func():
return [1]
它又起作用了。
此语法的附加功能在这里很重要,如下所示:如果函数输出一个只有一个元素的列表,则从列表中获取该元素并输出。例如:
def func():
return [1]
a = func()
print(a)
输出为[1]
。对于逗号的情况:
a, = func()
print(a)
输出为CCD_ 9。
因此,作者不希望这个函数输出带有多个元素的列表,他们希望输出这个元素本身,而不是作为列表的一个元素。