Seite 1 von 1

Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 14:34
von DL3AD
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 ?

Re: Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 14:50
von __blackjack__
@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?

Re: Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 15:05
von DL3AD
... 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.

Re: Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 15:24
von __blackjack__
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.

Re: Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 17:42
von DeaD_EyE
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

Re: Funktionen vordefinieren ?

Verfasst: Mittwoch 8. Oktober 2025, 19:19
von nezzcarth
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".

Re: Funktionen vordefinieren ?

Verfasst: Donnerstag 9. Oktober 2025, 08:07
von Pedroski55
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)