Private und globale Variablen
Bis jetzt war unsere "hello" Funktion sehr simpel und überschaubar. Wir können aber innerhalb des Funktionskörpers so viel Code reinschreiben wie wir wollen. Wir können while und for Schleifen darin ausführen oder auch Variablen erstellen. Aber alle Variablen, die wir innerhalb der Funktion erstellen, existieren nur innerhalb des Kontextes der Funktion. Man könnte diese Art von Variablen auch "private Variablen" nennen und alle die wir einfach so außerhalb der Funktion erstellen, wären dann "globale Variablen".
Hier ein Biespiel was ich genau meine:
global_var = "im global!!"
def my_func():
private_var = "im private!! and only exist inside this function"
Da "global_var" im keinen Codeblock sondern ganz normal in unserer Scriptdatei erstellt worden ist, ist sie global überall verfügbar und wir könnten innerhalb der "my_func" Funktion darauf zugreifen.
Die "private_var" hingegen, existiert nur innerhalb des Funktionskörpers und würden wir außerhalb der Funktion darauf zugreifen, dann bekommen wir einen Error.
Hier nochmal ein anderes Beispiel mit unserer "hello" Funktion:
def hello():
text = "hello world"
print(text)
hello()
print(text)
hello world
Traceback (most recent call last):
File "/home/marc/main.py", line 6, in <module>
print(text)
^^^^
NameError: name 'text' is not defined. Did you mean: 'next'?
Wie du am Output erkennen kannst wird "hello" erst volkommen ohne Probleme ausgeführt.
Erst die Zeile mit print(text)
schmeißt einen Error,
weil Python text
nur im Kontext der Funktion kennt nicht global,
so wie wir es hier versuchen.
Natürlich würde unser Script wieder funktionieren, wenn wir "text" einmal global erstellen würden. Und zwar so:
text = "hello global"
def hello():
text = "hello world"
print(text)
hello()
print(text)
hello world
hello global
Obwohl wir zwei Variablen namens "text" haben, sind beide voneinander getrennt und innerhalb der Funktion kennen wir nur "text" mit dem Wert "hello world", doch sobald wir außerhalb des Kontextes der Funktion sind, kennen wir ausschließlich "text" mit dem Wert "hello global".
Was wenn ich jetzt die Variable "text" innerhalb der Funktion wieder entferne, würde dann unser Script noch funktionieren? Lass uns das mal ausprobieren!
text = "hello global"
def hello():
print(text)
hello()
hello global
Wie du siehst, ja! Also vom Kontext der Funktion aus, können wir auf globale Variablen zugreifen, aber nicht anders herum.