60

変数行の後のコンマの意味がわかりません: http://matplotlib.org/examples/animation/simple_anim.html

line, = ax.plot(x, np.sin(x))

コンマと変数「行」を削除すると、変数「行」になり、プログラムが壊れます。上記の URL からの完全なコード:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()
ax = fig.add_subplot(111)

x = np.arange(0, 2*np.pi, 0.01)        # x-array
line, = ax.plot(x, np.sin(x))

def animate(i):
    line.set_ydata(np.sin(x+i/10.0))  # update the data
    return line,

#Init only required for blitting to give a clean slate.
def init():
    line.set_ydata(np.ma.array(x, mask=True))
    return line,

ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
    interval=25, blit=True)
plt.show()

http://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequencesによると、変数の後のコンマは、1 つの項目のみを含むタプルに関連しているようです。

4

2 に答える 2

76

ax.plot()1 つの要素を持つタプルを返します。カンマを代入先リストに追加することで、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

アンパックに関して代入がどのように機能するかの詳細については、Assignment Statementsのドキュメントを参照してください。

于 2013-04-16T12:49:39.093 に答える