Ответ 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
Подробную информацию о том, как работают задания для распаковки, см. в документации Отчеты о присваивании.