Ablauf von Pythonsripten Animieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

Ablauf von Pythonscripten Animieren bzw. Visualisieren .

Gibt es eine Software bzw. Programm mit der man den Ablauf von Pythonscripten visualisieren kann ?

Z.B. gab oder gibt es immer noch Hardware- Simulationsprogramme
für Prozessoren wie Z80 oder Intel 8085. Dort wurde der interne Aufbau der CPU und seinen Arbeitsspeicher grafisch nachgebildet und man konnte genau verfolgen was das Programm wo im Arbeitsspeicher und Register gemacht hat.

Sowas in der Art würde ich mir auch für Python wünschen.
Dann könnte man sehen wann genau eine Instanz einer Klasse zum Leben erweckt wird und wann dieses Objekt wieder aus dem Speicher verschwindet. Die Objekte und Variablen müßten als Rechtecke oder Kreise dargestellt werden aber eben ANIMIERT. So was wie Superdebugger und UML Grafik in einem.
BlackJack

@Max77: Es gibt auf jeden Fall normale Debugger, also ohne grafische Darstellung von Objekten. WinPDB wäre da mein Favorit. Das Win im Namen bezieht sich nicht auf das Betriebssystem Windows, sondern nur das im Gegensatz zu `pdb` aus der Standardbibliothek einer mit Fenster ist. Der läuft auch auf anderen Betriebssystemen.

Wobei ich Debugger dieser Art in Python für nicht so sinnvoll halte, da die Sprache ein wesentlich höheres Abstraktionsniveau besitzt, im Vergleich zu den Prozessorgeschichten oder auch Programmiersprachen wie C oder Pascal, wo ich solche Debugger auch nützlich fand/finde. In Python ist sowas IMHO nur sinnvoll wenn man einen Algorithmus 1:1 von so einer Sprache ”übersetzt”. Und wenn so ein Debugger für Python-Code sinnvoll ist, dann ist das oft ein Zeichen das man keinen „pythonischen“ Code vorliegen hat. Zum Beispiel weil man den von einer anderen Sprache 1:1 ”übersetzt” hat. :-)
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

Wäre dieser WinPDB denn dazu geeignet zu Verstehen wie ein Pythonprogramm vom Interpreter abgearbeitet wird ?
Also wann genau wird eine Variable im Arbeitsspeicher angelegt, wann wird dieser Speicherplatz wieder freigegeben
und das Gleiche mit Objekten.

Könnten UML Kommunikationsdiagramme oder Sequenzdiagramme mir beim Verstehen des Programmes helfen ?
Gibt es eine fertige Software die ein Pythonprogramm in Sequenzdiagramme umwandeln könnte ?
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

PS:
kann ich hier auch eine PowerPoint Datei (pps) hochladen ? Dann kann ich mein Anliegen besser Vortragen.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@Max77: ich denke nicht, dass man mit Hilfe eines Debuggers verstehen kann, wie eine Programmiersprache funktioniert. Eher umgekehrt. Um etwas mit einem Debugger anfangen zu können, muß man das Programm und die Mechanismen der Programmiersprache schon genau kennen.

Deine Fragen lassen sich auch einfach beantworten:
Variablen existieren so lange, wie der Namensraum existiert: kurz, Variablen sind weg, wenn die Funktion verlassen wird. Objekte existieren solange man auf sie zugreifen kann.
BlackJack

@Max77: Ein Debugger zeigt Dir die Namen und Werte an, die jeweils in einem Sichtbarkeitsbereich existieren. Und bei den Werten in der Regel so viel wie er mit Introspection herausfinden kann.

Den Unterschied Variable und Objekt den Du da zu machen scheinst, gibt es in Python nicht. In Python ist jeder Wert ein Objekt. Wann ein Objekt im Arbeitsspeicher angelegt wird siehst Du ja daran das Du etwas aufrufst, was dieses Objekt erzeugt. Wenn ein Aufruf ein Objekt zurück gibt das nicht bei diesem Aufruf erzeugt wurde weil es vorher schon existierte — nun ja, das kann man nicht erkennen. Braucht man doch eigentlich auch nicht.

Am anderen Ende kann man auch nicht sehen wann der Arbeitsspeicher wieder freigegeben wird. Aber auch das ist eine Information die normalerweise nicht wirklich wichtig ist. Da er nicht freigegeben wird solange noch irgendwie darauf zugegriffen werden kann, kann es ja nicht passieren, dass man auf Speicher zugreift der kein ”lebendiges” Objekt mehr enthält.

UML-Diagramme können beim verständnis helfen, aber eher keine automatisch generierten, denn da in Python jeder Wert ein Objekt ist, und Operatoren auch zu Methodenaufrufen werden, dürfte da sehr viel mehr in so einem Diagramm stehen als Dir lieb ist, so dass es letztendlich wieder unübersichtlich wird.
BlackJack

@Max77: Bezüglich der Präsentation: Es gibt ja diverse Slide-Hoster. Da könntest Du es hochladen und einen Link hier veröffentlichen.
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Ich hatte mal eine schöne webbasierte Animation gesehen, wo du dein Pythonscript eingeben kannst, und dann wird nebenan aufgemalt, welche Variablen und Objekte existieren und wie sie miteinander interagieren, während das Script so Befehl für Befehl durchläuft. Vielleicht hilft dir das schon?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
t7l
User
Beiträge: 5
Registriert: Donnerstag 2. Mai 2013, 14:48
Wohnort: Düsseldorf

@Kebap: Ist vielleicht http://pythontutor.com gemeint?
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

@t7l: Genau das! Kannst du Gedankenlesen? :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
t7l
User
Beiträge: 5
Registriert: Donnerstag 2. Mai 2013, 14:48
Wohnort: Düsseldorf

@Kebap: Ich arbeite fleißig daran... ;)
Ich brauche das aber tatsächlich selbst hin und wieder, um Abläufe zu verdeutlichen und deine Beschreibung passte einfach exakt darauf. :)
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

Ich habe mal ein kleines Video bei VIMEO eingestellt um zu Zeigen was ich genau meine:

https://vimeo.com/173812623
Max77
User
Beiträge: 19
Registriert: Samstag 30. April 2016, 13:42

Aaaah ! :D

Jetzt erst sehe ich die Beiträge von kebap und t7l:


Jaaa - Genau sooowas meine ich. Das müßte es auch als Programm zum Downloaden geben
oder integriert in einem Debugger oder Python-Editor.
BlackJack

@Max77: Es ist ja OpenSource, also kannst Du das auch runterladen und Dir lokal oder auf einem eigenen Webserver aufsetzen.

In einem Debugger oder Editor ist es nicht, weil es zum debuggen nicht taugt, das tun IMHO ja noch nicht einmal Debugger selber für Python, und für einen Editor/IDE ist es wohl zu exotisch.

Schau Dir mal den Ablauf der Funktion aus dem anderen Thema mit dem Generatorausdruck damit an. Das wird zwar erstaunlich gut dargestellt, da war ich positiv überrascht wie gut der Generatorausdruck von dem Programm visualisiert wird, allerdings muss man um die Anzeige zu verstehen, vorher schon den Programmablauf mit diesem Konstrukt verstanden haben. Es hilft also an der Stelle nicht beim lernen. Und wenn man den Programmablauf verstanden hat, dann braucht man *dafür* auch keine Visualisierung mehr.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Es gibt für Linux KTurtle, was m. E. auch die gerade bearbeitete Zeile anzeigt. KTurtle ist eine Lernumgebung für Kinder mit der Programmiersprache Logo (nicht Python!). Um grundlegende Konstrukte zu lernen, ist das m. E. sehr hilfreich.

Du kennst die print-Funktion? Wenn ich so ein Anliegen wie du verfolge, dann baue ich print-Anweisungen ein und zwar lasse ich mir dann den Inhalt der für mich interessierten Variablen anzeigen. Ich nutze so etwas z. B., um logische Fehler in meinen Programmen zu suchen.

Code: Alles auswählen

# python-forum 38799-0001.py

liste = ["Herr Kaiser", "Frau König", "Frau Adel",
         "Her Bauer", "Frau Schmied"]

for item in liste:

    print("Variable liste = ", "; ".join(liste))
    print("Länge der liste= ", len(liste))
          
    anrede = liste.pop()
    
    if anrede.startswith("Herr"):
        print("Mann -", anrede)
    elif anrede.startswith("Frau"):
        print("Frau -", anrede)
    else:
        print("Unklar -", anrede)
Dann hast Du eine sehr einfache Visualisierung (Textform), was gerade mit den Sachen passiert. Bei einer Programmiersprache, die selbst ihren Abfall rausbringt, finde ich eine Information, wann welche Variable gelöscht wird, nicht interessant - vielleicht bin ich da aber auch nur schlecht informiert.
Antworten