Seite 1 von 1

Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Sonntag 26. März 2023, 19:54
von norgsmen
Hi Leute,
ich konnte leider nichts zu der Bedeutung ''Wird zur Laufzeit ausgewertet'' finden.
Was genau heißt das? Zum Beispiel bei f-strings sagt man, dass diese zur Laufzeit ausgewertet werden.
Danke fürs Antworten:)

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Sonntag 26. März 2023, 19:57
von __deets__
Laufzeit bezieht sich auf den Moment, wenn dein Programm im allgemeinen und im speziellen an dieser Stelle die Instruktionen abarbeitet. Und fuer einen f-String bedeutet das, dass der mit seinen Format-anweisungen in dem Moment ausgewertet wird, um den Ergebnisstring zu bekommen.

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Sonntag 26. März 2023, 21:05
von snafu
Wobei man das nicht falsch verstehen sollte. Als Beispiel sei folgender Code gegeben:

Code: Alles auswählen

result = 42
text = f"The result is {result}"
print(text)
result = 100
print(text)
Jetzt könnte man - je nach Lesart - denken, dass der zweite print()-Aufruf die 100 übernimmt, weil der f-String das {result} ja erst zur Laufzeit auswertet. Es bleibt jedoch bei 42, denn die Auswertung bezieht sich auf den Moment, wo der f-String erzeugt wird. Und da ist das "result" eben noch 42.

Nehmen wir aber sozusagen als Gegenbeispiel den folgenden Code:

Code: Alles auswählen

def get_result(x):
    return f"The result is {x}"

x = 42
print(get_result(x))
x = 100
print(get_result(x))
... dann wird im zweiten Fall die 100 übernommen, denn der f-String wird ja durch die Funktion jedes Mal neu erstellt und benutzt daher immer den aktuellen Wert von "x".

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 08:13
von norgsmen
@snafu Danke für das Beispiel

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 11:27
von juwido
Dabei muß man sehen, daß der Interpreter ja schon beim Laden der Programmdatei den Code zerlegt und gewissermaßen ein Gerüst für den anschließenden Programmablauf erstellt...

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 14:33
von __blackjack__
@norgsmen: Als Ergänzung: Das Gegenteil von „zur Laufzeit“ ist „zur Übersetzungszeit“. Das ist bei Python üblicherweise sehr eng mit der Laufzeit verwoben, weil die Übersetzung bei Bedarf automagisch beim ``import`` von Modulen erfolgt, also dann wenn auch die Laufzeit schon begonnen hat. Bei anderen Programmiersprachen ist das Übersetzen des Quelltexts in eine irgendwie geartete ausführbare Form deutlicher von der Laufzeit des Programms getrennt. Und dann gibt es Programmiersprachen bei denen selbstgeschriebener Code zur Übersetzungszeit ausgeführt werden kann. Das klassische Beispiels sind Sprachen aus der Lisp- und Scheme-Familie wo dieser Code seinerseits syntaktisch letztlich genau mit den gleichen Mitteln arbeitet wie der Code der zur Laufzeit ausgeführt wird. Bei anderen Programmiersprachen unterscheidet sich die Syntax deutlich(er). Zum Beispiel bei C (Präprozessor-Makros) oder C++ (Präprozessor und Templates).

Eine ”harte” Trennung kann man bei Python beispielsweise bei GUI-Designern haben, die zum Beispiel XML-Dateien speichern, die man in Python-Quelltext übersetzen kann, vor der Ausführung. Oder die man zur Laufzeit des Programms laden kann um die GUI-Elemente zu erstellen. Beispiele wären hier der Qt-Designer oder das Programm Glade für GUIs die auf Gtk aufbauen.

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 15:08
von Sirius3
Ich habe mit dem Begriff "zur Laufzeit ausgewertet" ein bißchen ein Problem. Der String text kann natürlich nur zur Laufzeit erzeugt werden, weil der Wert von result im Normalfall erst zur Laufzeit feststeht.
Der f-String an sich wird aber schon zur Compilezeit ausgewertet und zu

Code: Alles auswählen

  3           4 LOAD_CONST               2 ('The result is ')
              6 LOAD_FAST                0 (result)
              8 FORMAT_VALUE             0
             10 BUILD_STRING             2
             12 STORE_FAST               1 (text)[code]
compiliert.
Im Gegensatz zu str.format:
[code=python]text = "The result is {}".format(result)
Hier wird der Format-String wirklich zur Laufzeit ausgewertet.

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 15:26
von __blackjack__
@Sirius3: Das ist ja als würde man sage ``a + b`` wird nicht zur Laufzeit ausgewertet weil der Compiler da so etwas draus macht:

Code: Alles auswählen

  1           0 LOAD_GLOBAL              0 (a)
              2 LOAD_GLOBAL              1 (b)
              4 BINARY_ADD

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 15:31
von Kebap
Ihr verwirrt den armen Anfänger mit Ausnahmen von Ausnahmen..! :mrgreen:

Re: Wird zur Laufzeit ausgewertet Bedeutung

Verfasst: Montag 27. März 2023, 17:44
von Sirius3
@__backjack__: ich wollte nur sagen, dass f-Strings zum Teil während der Compilezeit und zum anderen Teil zur Laufzeit ausgewertet werden, was bei normalen Strings und format eben anders ist.