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:)
Wird zur Laufzeit ausgewertet Bedeutung
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.
Wobei man das nicht falsch verstehen sollte. Als Beispiel sei folgender Code gegeben:
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:
... 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".
Code: Alles auswählen
result = 42
text = f"The result is {result}"
print(text)
result = 100
print(text)
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))
- __blackjack__
- User
- Beiträge: 13939
- 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.
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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
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
Hier wird der Format-String wirklich zur Laufzeit ausgewertet.
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)
- __blackjack__
- User
- Beiträge: 13939
- 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
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Ihr verwirrt den armen Anfänger mit Ausnahmen von Ausnahmen..! 

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.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.