Matplotlib中经常使用的一种不常见的Python语法元素

dou*_*oug 6 python syntax reference matplotlib

一个附带条件:我的问题核心的语法元素是Python语言; 但是,这个元素经常出现在Matplotlib库中,这是我见过的唯一上下文.因此,无论是一般的Python语法问题还是特定于库的问题,我都不确定.我所知道的是,我无法找到任何关键点 - 无论是在Python语言参考中还是在Matplotlib文档中.

那些使用和/或开发优秀的Python绘图库的人,Matplotlib将识别下面的语法模式.(

from matplotlib import pyplot as MPL

>>> l, = MPL.plot(s, t)      # s & t are ordinary NumPy 1D arrays
Run Code Online (Sandbox Code Playgroud)

这个表达式左侧的构造是什么?和,

使用它的目的是什么?

我熟悉Python的分配解包,例如,

>>> a, b = [100, 200]
Run Code Online (Sandbox Code Playgroud)

我也知道在Python中,单项元组有时表示为t,

两者都可能是上述第一个问题的答案; 如果是这样,那么我还不明白为什么这里只需要从对的调用返回的值的第一个元素.

(注意:"l"是小写"ell";我使用这个字母是因为ls是这里最常用的字母,可能是因为它绑定到以相同字母开头的对象 - 见下文).


一些额外的背景:

plot的调用返回line2D实例的列表:

>>> type(l)
  <class 'matplotlib.lines.Line2D'>
Run Code Online (Sandbox Code Playgroud)

所以l是line2D类型的对象.

一旦绑定到lines2D对象,这个"变量"通常可以在Matplotlib代码中看到,如下所示:

>>> l.set_color("orange")
Run Code Online (Sandbox Code Playgroud)

此表达式更改表示绘图窗口内的数据值的行的颜色("绘图线")

以下是另一个例子; 它显示了这种"变量逗号"构造的常见场景,即在Matplotlib绘图窗口中嵌入小工具箱/图形 - 后端独立小部件,例如,通过复选框打开/关闭,在绘图窗口中出现多个数据系列.

在下面的代码中,创建了一个简单的Matplotlib图和一个由两个复选框组成的简单窗口小部件,每个复选框对应一个数据系列.

l0 l1再次绑定到绘图的调用; 当调用*on_click*时传入的自定义函数中调用get_visible和set_visible方法时,两者都会出现两个留置权.

from matplotlib.widgets import CheckButtons

ax = plt.subplot(111)
l0, = ax.plot(s, t, visible=False, lw=2)
l1, = ax.plot(t, s1, lw=2)

rax = plt.axes( [.05, .4, .1, .15] )
check = CheckButtons(rax, ('raw', 'transformed'), (False, True))

def fnx(checkbox_label):
    if checkbox_label == 'raw': 
        l0.set_visible(not l0.get_visible())
    elif checkbox_label == 'transformed': 
        l1.set_visible(not l1.get_visible())

check.on_clicked(fnx)

plt.show()
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 17

它是针对单个元素的序列解包.

>>> l = [3]
>>> v, = l
>>> v
3
Run Code Online (Sandbox Code Playgroud)