matplot: Variable mit Komma

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
caargoo
User
Beiträge: 20
Registriert: Sonntag 26. Januar 2020, 10:42

Hallo,
ich habe hier https://riptutorial.com/de/matplotlib/e ... darstellen
ein Beispiel gefunden in dem 2x line, vorkommt.
Was hat es da mit dem Komma auf sich?

MfG
Benutzeravatar
__blackjack__
User
Beiträge: 14328
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@caargoo: Damit steht links von der Zuweisung nicht ein einzelner Name sondern ein Tupel mit einem einzelnen Namen. Und da passiert dann ”tuple unpacking”:

Code: Alles auswählen

In [57]: xs = [42]                                                              

In [58]: line = xs                                                              

In [59]: line                                                                   
Out[59]: [42]

In [60]: line, = xs                                                             

In [61]: line                                                                   
Out[61]: 42
Ich persönlich finde es ja ein bisschen kryptisch das so zu schreiben und fände das hier lesbarer:

Code: Alles auswählen

In [62]: line = xs[0]                                                           

In [63]: line                                                                   
Out[63]: 42
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Sirius3
User
Beiträge: 18372
Registriert: Sonntag 21. Oktober 2012, 17:20

@caargoo: das Beispiel ist hat einige Fehler. `as` bei import ist dazu da etwas umzubenennen, animation wird aber gar nicht umbenannt. Dateien öffnet man nicht irgendwo, und verwendet sie irgendwo anders, sondern das sollte alles innerhalb eines with-Blocks stattfinden.
`datalist` wird initialisiert, dann beim plot aber gar nicht benutzt. Dann werden mittendrin einfach Funktionen definiert, die viele globale Variablen verwenden. `eval` darf man auf keinen Fall verwenden, zumal hier ein einfaches float ausreichend ist. Statt readline sollte man die Datei mit einer for-Schleife lesen.

Code: Alles auswählen

import collections
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation

def update(data, plots):
    plots.set_ydata(data)
    return plots

def data_gen(data, filename):
    with open(filename) as lines:
        for line in lines:
            data.append(float(line))
            yield data

def main():
    #configure the graph itself
    filename = "pipe"
    amount = 1000
    data = collections.deque([0] * amount, amount)
    fig, ax = plt.subplots()
    plots = ax.plot(data)
    ax.set_ylim(0, 256)
    ani = animation.FuncAnimation(fig, update, data_gen(data, filename), fargs=(plots,), interval=10, blit=True)
    plt.show()

if __name__ == '__main__':
    main()
caargoo
User
Beiträge: 20
Registriert: Sonntag 26. Januar 2020, 10:42

Dank Euren Erklärungen ist wieder einiges für mich klarer geworden.

MfG
Antworten