Hallo, ich bin ein Python Neuling. Aktuell arbeite ich ein Online Kurs ab, dabei hat sich mir eine Frage ergeben.
Ich dachte immer Python läuft von oben nach unten ab also wie wenn man ein Buch liest. Gestern habe ich jedoch festgestellt das meine Denkweise nicht so wirklich stimmen kann. Ich habe auf eine Funktion zugegriffen die ich erst danach (nach dem Zugriff) erstellt habe. Habe auch schon viel im Internet gesucht, aber weiß nicht ganz wie ich die Frage Formulieren kann. Vielleicht kann mir einer die Funktion dahinter erklären.
Liebe Grüße Niklas
Ablauf von Python
Ja, die Anweisungen werden von oben nach unten abgearbeitet. Eine Anweisung kann aber auch eine Funktionsdefinition sein, die Anweisungen innerhalb der Funktion werden dann nicht sofort abgearbeitet, sondern erst, wenn die Funktion auch aufgerufen wird (innerhalb der Funktion werden die Anweisungen dann wieder von oben nach unten abgearbeitet).
if-Anweisungen, Schleifen, Exceptions, Funktionsaufrufe, Generatoren, etc sorgen zusätzlich dafür, dass das einfache Bild von-oben-nach-unten etwas komplizierter wird.
if-Anweisungen, Schleifen, Exceptions, Funktionsaufrufe, Generatoren, etc sorgen zusätzlich dafür, dass das einfache Bild von-oben-nach-unten etwas komplizierter wird.
- __blackjack__
- User
- Beiträge: 14065
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@n1klas: Ich vermute mal Du hast so etwas:
Das Modul wird von oben nach unten ausgeführt. Erst wird ``def some_function`` ausgeführt, das *definiert* die Funktion, führt sie aber nicht aus. Darum ist es kein Problem das `another_function()` noch nicht definiert ist.
Dann wird ``def another_function`` ausgeführt. Jetzt existieren zwei Funktionen. Danach wird ``def main`` ausgeführt. Nun existieren alle drei Funktionen. Aber noch keine wurde bis zu diesem Zeitpunkt ausgeführt.
Das ``if`` am Ende wird ausgeführt und wenn man das Modul als Programm ausführt, dann hat `__name__` den Wert "__main__", also wird `main()` aufgerufen, was `some_function()` aufruft, wo dann `another_function()` auferufen wird. Die Funktion ruft `print()` auf, und dann kehren die Funktionen in umgekehrter Reihenfolge zu dem jeweiligen Aufruf zurück und der Code nach dem Aufrufen wird ausgeführt. Da steht jeweils nichts.
Mit `snoop` kann man sich die Aufrufreihenfolge und - hierarchie protokollieren lassen:
Code: Alles auswählen
#!/usr/bin/env python3
def some_function():
another_function()
def another_function():
print("Hello, World")
def main():
some_function()
if __name__ == "__main__":
main()
Dann wird ``def another_function`` ausgeführt. Jetzt existieren zwei Funktionen. Danach wird ``def main`` ausgeführt. Nun existieren alle drei Funktionen. Aber noch keine wurde bis zu diesem Zeitpunkt ausgeführt.
Das ``if`` am Ende wird ausgeführt und wenn man das Modul als Programm ausführt, dann hat `__name__` den Wert "__main__", also wird `main()` aufgerufen, was `some_function()` aufruft, wo dann `another_function()` auferufen wird. Die Funktion ruft `print()` auf, und dann kehren die Funktionen in umgekehrter Reihenfolge zu dem jeweiligen Aufruf zurück und der Code nach dem Aufrufen wird ausgeführt. Da steht jeweils nichts.
Mit `snoop` kann man sich die Aufrufreihenfolge und - hierarchie protokollieren lassen:
Code: Alles auswählen
09:58:23.01 >>> Call to main in File "forum21.py", line 14
09:58:23.01 14 | def main():
09:58:23.01 15 | some_function()
09:58:23.01 >>> Call to some_function in File "forum21.py", line 5
09:58:23.01 5 | def some_function():
09:58:23.01 6 | another_function()
09:58:23.01 >>> Call to another_function in File "forum21.py", line 9
09:58:23.01 9 | def another_function():
09:58:23.01 10 | print("Hello, World")
Hello, World
09:58:23.01 <<< Return value from another_function: None
09:58:23.01 6 | another_function()
09:58:23.01 <<< Return value from some_function: None
09:58:23.01 15 | some_function()
09:58:23.01 <<< Return value from main: None
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Wie denn das? Ist das ein Python-Feature oder gehört das zu deinem Betriebssystem?__blackjack__ hat geschrieben: Dienstag 17. Januar 2023, 09:59 Mit `snoop` kann man sich die Aufrufreihenfolge und - hierarchie protokollieren lassen:

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.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- __blackjack__
- User
- Beiträge: 14065
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das ist ein Package das man installieren kann: https://pypi.org/project/snoop/
“Vir, intelligence has nothing to do with politics!” — Londo Mollari