@Leon33: Du behauptest Python hätte nicht das was Du willst, sondern nur „normale Variablen“. Das was Du beschreibst sind aber normale Variablen. Verbindungen von Namen zu Werten, die man im Laufe des Programms neu zuweisen kann. Wenn das nicht geht, dann heisst das nicht Variable sondern Konstante. *Das* hat Python *nicht*, sondern nur Variablen. Darum gibt es eine Namenskonvention für Konstanten: den Namen KOMPLETT_GROSS schreiben. Das ist zwar eine Variable, aber es sind sich alle einig, das man die nicht ändert, auch wenn man das könnte. Das ist der Unterschied zwischen Variablen, die man ändern kann, und Konstanten, die man nicht ändern ”kann”. Da letztlich alle Namen in Python in der Hinsicht aber gleich behandelt werden, ist die Frage was für Dich der Unterschied zwischen „Variablen“ und „normalen Variablen“ ist. Das macht keinen Sinn.
(Kleiner Einschub: Es ist gut, dass Du Batch-Programmierung erwähnt hast, denn jemand der von einer funktionalen Programmiersprache kommt, und nichts anderes kennt, könnte tatsächlich der Meinung sein, dass man einer Variablen nur genau einmal einen Wert zuweisen kann, und das später nicht ändern kann.)
Und im zweiten Absatz habe ich dann einfach mal geraten, dass Dein Problem nicht ist, dass Du einem Namen keinen Wert zuweisen kannst, sondern das der Name dem Du einen Wert zuweisen willst, nicht in dem Namensraum existiert wo Du das tun willst, also beispielsweise in einer Funktion einem Namen ausserhalb der Funktion etwas zuweisen, insbesondere auf Modulebene. Das geht nicht so einfach, und das ist auch gut so, denn das will man nicht. Solltest Du der Meinung sein das machen zu wollen: Nein das will man nicht.
Das was Du beschreibst, klingt nach:
Code: Alles auswählen
status = "unbekannt"
print(status) # Gibt "unbekannt" aus.
if is_nas_online():
status = "online"
else:
status = "offline"
print(status) # Gibt je nach Status "online" oder "offline" aus.
Und das geht problemlos. Wenn das bei Dir nicht geht, musst Du schon etwas genauer werden was genau bei Dir nicht geht.
Python hat übrigens einen bedingten Ausdruck, so dass sich das ``if``/``else``-Konstrukt auch in *einer* Zuweisung formulieren lässt:
Code: Alles auswählen
status = "unbekannt"
print(status) # Gibt "unbekannt" aus.
status = "online" if is_nas_online() else "offline"
print(status) # Gibt je nach Status "online" oder "offline" aus.
Falls der Status über mehrere Funktionen hinweg benötigt wird: Dafür gibt es Argumente und Rückgabewerte. So wie `is_nas_online()` das Ergebnis zurück gibt und nicht einfach irgendwo magisch an einem überall verfügbaren Namen bindet, und `print()` das was man ausgeben will, als Argument übergeben muss, und das nicht irgendeine magische global verfügbare ausgibt, macht man das auch in eigenen Funktionen.
Falls Du von Batch mit SETLOCAL/ENDLOCAL, und Wertrückgabe über Referenzen, oder noch schlimmer globale Variablen kommst, und die Abschnitte zu Funktionen im Tutorial in der Python-Dokumentation noch nicht durchgearbeitet hast, dann solltest Du das am besten jetzt mal machen, bevor Du weiter programmierst und versuchst Konzepte aus der Batch-Programmierung Python zu erwarten. Falls Dir gar SETLOCAL/ENDLOCAL nichts sagen, dann musst Du definitiv umdenken in Python.