Funktionen vordefinieren ?

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
DL3AD
User
Beiträge: 58
Registriert: Montag 31. August 2015, 19:03

Hallo in die Runde,

unter C++ und Lazarus Freepascal habe ich öfters Funktionen vordefiniert und war so nicht mehr an das Top Down gebunden.
in etwa so:

Code: Alles auswählen

//Vordefinition
void mycmd();

//eigendliche Funktion
void mycmd(){
	// machwas
}
Gibt es sowas auch unter Python ?
Benutzeravatar
__blackjack__
User
Beiträge: 14185
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DL3AD: Nein. Das wird ja *ausgeführt*, und bevor ein ``def`` das eine Funktion definiert nicht ausgeführt wurde, kann man die Funktion nicht benutzen, weil es da dann noch nichts gibt was man aufrufen könnte.

Was ist denn das konkrete Problem?
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
DL3AD
User
Beiträge: 58
Registriert: Montag 31. August 2015, 19:03

... kein konkretes Problem.
Ich vergleich nur mit dem was ich bisher tat.
Setze zur Übung ältere kleinere Projekte noch mal neu auf mit Python.

MicroPython ist auch ganz nice - macht spass.
Benutzeravatar
__blackjack__
User
Beiträge: 14185
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Probleme gäbe es da doch eigentlich nur wenn man Code auf Modulebene schreibt, bei so Sachen wie Dekoratoren, und wenn die `main()` ausgeführt wird, muss halt vorher alles definiert sein, was die verwendet.

Funktionen müssen nur definiert sein wenn man sie tatsächlich aufruft, und noch nicht wenn der Compiler nur Code übersetzt der Funktionen aufruft. Das übersetzen eines Moduls passiert ja komplett bevor das Modul ausgeführt wird.

Wenn es kein Problem löst, verstehe ich nicht so ganz warum Du das machen willst. Kannst ja die Funktionsdeklaration als Kommentar oder in den Modul-DocString schreiben. Ist doppelte Arbeit, und man muss immer darauf achten, dass Deklaration und tatsächliche Funktionsdefinition immer gleich bleiben, denn Python interessiert sich für die Definition ja nicht und stellt dann auch nicht fest wenn die nicht zusammenpassen, wie der Compiler bei C++ oder Lazarus.

Die Reihenfolge die Python für einige wenige Konstrukte innerhalb einer Datei *erzwingt* würde ich auch als „bottom up“ und nicht als „top down“ bezeichnen. Das die meisten diese Reihenfolge auch beibehalten wenn sie nicht erzwungen wird, ist halt konsistent, so dass man sich leichter im Quelltexten zurecht findet.
“Every thinking person fears nuclear war and every technological nation plans for it. Everyone knows
it's madness, and every country has an excuse.” — Carl Sagan, Cosmos, Episode 13: Who Speaks for Earth?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1275
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

DL3AD hat geschrieben: Mittwoch 8. Oktober 2025, 14:34 unter C++ und Lazarus Freepascal habe ich öfters Funktionen vordefiniert und war so nicht mehr an das Top Down gebunden.

...

Gibt es sowas auch unter Python ?
Bei C/C++ erreicht man das über die Header-Dateien. Wenn man als Entwickler z.B. eine Bibliothek nutzen möchte, reicht die kompilierte Bibliothek und die Header-Datei aus. Den Quellcode benötigt man zum Aufrufen der Funktionen nicht.
Bei Python gibt es etwas Ähnliches für TypeHints: https://mypy.readthedocs.io/en/stable/stubs.html

Oftmals fehlen die TypeHints bei bestimmten Python-Modulen (häufig von Drittanbietern). Die TypeHints helfen der IDE die korrekten Typen und ggf. Fehler zu erkennen. Für Micropython gibt es z.B. auch Stubs: https://github.com/Josverl/micropython-stubs
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
nezzcarth
User
Beiträge: 1779
Registriert: Samstag 16. April 2011, 12:47

DL3AD hat geschrieben: Mittwoch 8. Oktober 2025, 14:34 unter C++ und Lazarus Freepascal habe ich öfters Funktionen vordefiniert und war so nicht mehr an das Top Down gebunden.
Die Sprachen, die ich kenne, die Funktionsprototypen haben (z.B. C und Perl), machen das, weil die Reihenfolge beim Übersetzen/Kompilieren wichtig ist, um bestimmte Merkmale der Sprache in Bezug auf Typen- und Argumenthandling auszugleichen oder beides. In Python ist die Reihenfolge, in der du deine Funktionen hinschreibst aber egal; man kann halt nur nichts ausführen, was noch nicht definiert wurde. Das Argumenthandling in Python ist semantisch recht reichhaltig und flexibel (während Perl, zumindest bis vor einigen Versionen, auf einen sehr generalisierten Mechanismus setzt). Und wenn man Typinformationen haben möchte, kann man sich seinen Quelltext mit Typ-Annotationen "verschönern".
Pedroski55
User
Beiträge: 24
Registriert: Freitag 25. Juli 2025, 00:20

Vordefinieren = nicht definieren. Nicht sinnvoll in Python.

Du kannst pass benutzen, und so eine Funktion herstellen, die gar nichts bewirkt, aber, was nutzt das?

Code: Alles auswählen

def etwas_tun():
    pass

def etwas_tun():
    print('ist was?')
    pass

def etwas_tun():
    for i in range(5):
       if i == 3:
           pass # später schreib etwas wunderbewirkendes hierhin
       else:
           print(i)
Antworten