Необычный элемент синтаксиса Python, часто используемый в Matplotlib - PullRequest
6 голосов
/ 16 марта 2012

Одно условие: синтаксический элемент в основе моего Вопроса находится на языке Python; однако этот элемент часто появляется в библиотеке Matplotlib, которая является единственным контекстом, который я видел. Так что, будь то общий вопрос о синтаксисе Python или вопрос по конкретной библиотеке, я не уверен. Что я знаю, так это то, что я не смог найти ничего на месте - ни в Python Language Reference , ни в документации 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 - это буква, наиболее часто используемая здесь, возможно потому, что она связана с объектом, который начинается с той же буквы, см. Ниже) .


Некоторый дополнительный контекст:

Вызов сюжет возвращает список line2D экземпляров :

>>> type(l)
  <class 'matplotlib.lines.Line2D'>

Таким образом, l является объектом типа line2D.

После привязки к объекту lines2D эту «переменную» обычно можно увидеть в коде Matplotlib следующим образом:

>>> l.set_color("orange")

Это выражение изменяет цвет линии, которая представляет значения данных в окне графика («линия графика»)

Ниже приведен еще один пример; он показывает общий сценарий для этой конструкции «переменная-запятая», которая встраивает небольшие виджеты, независимые от набора инструментов и графического интерфейса, в окно графика Matplotlib, например, для включения / выключения с помощью флажка, когда несколько рядов данных появляются в окне графика .

В приведенном ниже коде создается простой график Matplotlib и простой виджет, состоящий из двух флажков, по одному для каждого ряда данных.

10 и 11 снова связаны с вызовами на сюжет ; оба появляются через пару залоговых прав позже, когда их методы 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()

Ответы [ 2 ]

17 голосов
/ 16 марта 2012

Это последовательность распаковки для одного элемента.

>>> l = [3]
>>> v, = l
>>> v
3
2 голосов
/ 16 марта 2012
l, = v

[почти] совпадает с

[l] = v

Пример

>>> l=[3]
>>> [v] = l
>>> v
3
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...