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: 13103
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
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17749
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