Одна оговорка: элемент синтаксиса, лежащий в основе моего Вопроса, находится на языке 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
Какова конструкция в левой части этого выражения?И,
какова цель его использования?
Я знаком с распаковкой присваивания в Python, например,
>>> a, b = [100, 200]
Я также знаю, что в Python одноэлементные кортежииногда представляются как t,
И любой из них может быть ответом на первый вопрос выше; если это так, то я не пока не понимаю, почему здесь нужен только первый элемент значения, возвращаемого вызовом plot.
(примечание: «l» — это строчная буква «ell»; я использую эту букву, потому что здесь чаще всего используется буква ls, вероятно, потому, что она привязана к объекту, который начинается с той же буквы — см. ниже).
Дополнительный контекст:
Вызов plotвозвращает список экземпляров line2D:
>>> type(l)
<class 'matplotlib.lines.Line2D'>
So l является объектом типа line2D .
После привязки к объекту lines2D эта «переменная» обычно отображается в коде Matplotlib следующим образом:
>>> l.set_color("orange")
Это выражение изменяет цвет линии, которая представляет значения данных внутри окна графика («линия графика»)
Ниже приведен еще один пример; он показывает общий сценарий для этой конструкции «переменная запятая», которая представляет собой встраивание небольших виджетов, независимых от инструментария / графического бэкэнда, в окно графика Matplotlib, например, для включения / выключения с помощью флажка, несколько рядов данных, появляющихся в окне графика .
В приведенном ниже коде создается простой график Matplotlib и простой виджет, состоящий из двух флажков, по одному для каждой серии данных.
l0иl1снова привязаны к вызовам plot; оба появляются несколькими залогами позже, когда их методы get_visible и set_visible вызываются в пользовательской функции, передаваемой при вызове *on_click*.
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()