Wird zur Laufzeit ausgewertet Bedeutung

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
norgsmen
User
Beiträge: 55
Registriert: Samstag 26. Juni 2021, 22:09

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

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.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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".
norgsmen
User
Beiträge: 55
Registriert: Samstag 26. Juni 2021, 22:09

@snafu Danke für das Beispiel
juwido
User
Beiträge: 19
Registriert: Donnerstag 15. Dezember 2022, 13:41

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...
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Ihr verwirrt den armen Anfänger mit Ausnahmen von Ausnahmen..! :mrgreen:
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.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@__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.
Antworten