MicroPython: Variablen in Funktionen
Variablen sind vom Programmierer erstellte Schlüsselworte, die Werte, Zahlen, Texte oder andere Datentypen enthalten können.
Beim Verwenden von Variablen in Funktionen muss man ein paar Dinge beachten, über die man als Anfänger gerne mal stolpert.
Variablen in Funktionen
Auf Variablen, die außerhalb von Funktionen erstellt wurden, kann man in Funktionen jederzeit lesend zugreifen.
# Variable x setzen
x = 10 def view(): # Variable x setzen print(x) view() # Ausgabe: 10
Variablen in Funktionen ändern
Anders sieht es aus, wenn man eine Variable ändern will. Der folgende Programmcode erzeugt eine Fehlermeldung.
# Variable x setzen x = 10 # Funktion def view(): # Variable x ändern x = x + 1 # Variable x ausgeben print(x) view() # Ausgabe: 10
Dieser Programmcode verursacht folgende Fehlermeldung:
NameError: local variable referenced before assignment
Die Fehlermeldung „NameError: local variable referenced before assignment“ bedeutet, dass in dem Programmcode versucht wurde, auf eine lokale Variable zuzugreifen (x + 1), bevor sie einen Wert bekommen hat.
Wenn die Variable außerhalb der Funktion erstellt wurde, gibt es verschiedene Lösungen, um sie innerhalb der Funktion zu verwenden.
Lösung 1: Globale Variable verwenden
Wenn eine Funktion eine Variable ändern soll, die schon außerhalb verwendet wurde, dann kann man sie innerhalb der Funktion mit dem Schlüsselwort „global“ kennzeichnen, damit diese Variable innerhalb der Funktion geändert werden kann.
# Variable x setzen x = 10 def edit_global(): # als globale Variable deklarieren global x # Änderung der globalen Variable x = x + 1 def view(): print(x) # Ausgabe der Variable x view() # Ausgabe: 10 edit_global() view() # Ausgabe: 11
In diesem Beispiel wird die Variable „x“ zuerst auf 10 gesetzt. Die Funktion „edit_global“ verwendet das Schlüsselwort „global“, um anzuzeigen, dass sie die Variable „x“ ändern möchte. Nach dem Aufruf von „edit_global“ hat sich der Wert der Variable „x“ auf 11 geändert.
Lösung 2: Variable übergeben
Wenn eine Funktion eine Variable ändern soll, die schon außerhalb verwendet wurde, dann kann man sie der Funktion als Parameter übergeben und innerhalb der Funktion ändern. Anschließend muss man mit einem „return“ die Variable wieder zurückgeben. Der Funktionsaufruf muss dann aber auch die Variable überschreiben.
# Variable x setzen x = 10 def edit_var(y): # Änderung der übergebenen Variable y = y + 1 return y def view(): print(x) # Ausgabe der Variable x view() # Ausgabe: 10 x = edit_var(x) view() # Ausgabe: 11
In diesem Beispiel wird die Variable „x“ zuerst auf 10 gesetzt. Die Funktion „edit_var“ bekommt die Variable beim Aufruf übergeben und verwendet sie in der Funktion als Variable „y“. Am Ende der Funktion wird die Variable „y“ zurückgegeben und beim Funktionsaufruf der Variable „x“ zugewiesen.
Was ist die bessere Lösung?
Das Verwenden von globalen Variablen scheint eine schnelle und einfache Lösung zu sein. Aber, die Verwendung von „global“ erschwert die Fehlersuche, wenn beliebige Funktionen den Zustand einer Variable „versteckt“ verändern.
Dagegen scheint das Übergeben und Zurückgeben von Variablen über die Funktion umständlich zu sein. Allerdings ist sofort ersichtlich, woher Werte und Daten kommen und wohin sie übergeben werden. Die Zeile „x = edit_global(x)“ beschreibt explizit, dass die Variable „x“ an die Funktion „edit_global“ übergeben wird, deren Inhalt eventuell verändert wird und anschließend in die Variable „x“ geschrieben wird.
Welche Lösung man verwenden sollte hängt ein wenig mit der Länge des Programmcodes ab. Ist der Programmcode nur sehr kurz, dann ist die Verwendung von „global“ sicherlich in Ordnung. Sobald der Programmcode über mehrere Bildschirmseiten verläuft oder sogar in mehreren Dateien aufgeteilt ist, sollte man „global“ vermeiden.
Das Verwenden von „global“ ist nur dann sinnvoll, wenn man mit Variablen arbeiten will, die von mehreren Funktionen genutzt und verändert werden. Denkbar ist es auch als schnelle Lösung in einem kurzen Programmcode, wenn man es verantwortungsvoll und sparsam einsetzt.
Weitere verwandte Themen:
- MicroPython: Funktionen
- MicroPython: Variablen und Konstanten
- MicroPython: Datentypen
- MicroPython: Sprachstruktur
- Raspberry Pi Pico: MicroPython-Kurs
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.