Ablauf von Python

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
n1klas
User
Beiträge: 6
Registriert: Sonntag 1. Januar 2023, 20:02

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Den Code zu zeigen würde helfen.
n1klas
User
Beiträge: 6
Registriert: Sonntag 1. Januar 2023, 20:02

Mache ich heute Nachmittag sofort.

Wie läuft so ein Python Code im Normalfall ab von oben nach unten oder wie ist da die Herangehensweise?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, tut er.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__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:

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()
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

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
Benutzeravatar
Kebap
User
Beiträge: 776
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

__blackjack__ hat geschrieben: Dienstag 17. Januar 2023, 09:59 Mit `snoop` kann man sich die Aufrufreihenfolge und - hierarchie protokollieren lassen:
Wie denn das? Ist das ein Python-Feature oder gehört das zu deinem Betriebssystem? :shock:
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.
Benutzeravatar
__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
n1klas
User
Beiträge: 6
Registriert: Sonntag 1. Januar 2023, 20:02

Vielen Dank für die vielen und ausführlichen Antworten, meine Frage hat sich beantwortet, vielen Dank.
Antworten