2012-05-02 13 views
12

Sto provando a fare una trama animata. Ecco un esempio di codice:riga, = trama (x, sin (x)) cosa significa virgola?

from pylab import * 
import time 

ion() 

tstart = time.time()    # for profiling 
x = arange(0,2*pi,0.01)   # x-array 
line, = plot(x,sin(x)) 
for i in arange(1,200): 
    line.set_ydata(sin(x+i/10.0)) # update the data 
    draw()       # redraw the canvas 

print 'FPS:' , 200/(time.time()-tstart) 

Non capisco il line,. Senza virgola, il codice non funziona.

+3

possibile duplicato di [Un elemento di sintassi Python insolito utilizzato frequentemente in Matplotlib] (http://stackoverflow.com/questions/9731779/an-unusual-python-syntax-element-frequently-used-in-matplotlib) –

risposta

16

La virgola è la sintassi Python che denota una tupla a elemento singolo. Ad esempio,

>>> tuple([1]) 
(1,) 

In questo caso, viene utilizzato per argomento disimballaggio: plot restituisce una lista unica-elemento, che viene scompattato in line:

>>> x, y = [1, 2] 
>>> x 
1 
>>> y 
2 
>>> z, = [3] 
>>> z 
3 

Un'alternativa, forse modo più leggibile di fare questo è quello di utilizzare la lista-come sintassi:

>>> [z] = [4] 
>>> z 
4 

se il z, = è più comune in codice Python.

+6

Solo mi ha superato, +1, ma non sono d'accordo sul fatto che un modo più leggibile per farlo è usare la sintassi di tipo lista, io invece lo userei: 'line = plot (x, sin (x)) [0]'. – orlp

+0

o anche la sintassi simile a tupla: '(z) = [4]' :) – ovgolovin

+2

@nightcracker: l'indicizzazione con '[0]' non equivale a decompressione, poiché non controlla se il numero di elementi nel il valore di ritorno di 'plot' corrisponde al numero di variabili assegnate. –