Seite 1 von 1
Variable auf importierte Definition anwenden
Verfasst: Samstag 20. November 2021, 21:18
von pflaf
Hallo zusammen,
Ich habe eigentlich eine recht simple Frage:
Ich habe zwei Dateien "main.py" und "definition.py" und möchte in "definition.py" eine Funktion definieren, und diese mit einer Variablen aus "main.py" in "main.py" verwenden.
Die Dateien sehen wie folgt aus:
Scheinbar gilt die Variable k aber nur innerhalb von main.py, weshalb ich eine Fehlermeldung "NameError: name 'k' is not defined" erhalte.
Wie kann ich die Variable modifizieren, sodass sie auch von importierten Funktionen erkannt wird? Ich möchte wenn ich "main.py" laufen lasse die Variable per
eingeben, daher kann ich sie nicht in "definition.py" definieren. Ein Umweg wäre, die eingegebene Variable in ein .txt Dokument zu schreiben und dieses dann in "definition.py" wieder auszulesen, das habe ich bisher nicht getestet, da ich das eigentlich gerne vermeiden würde, das wäre schließlich wirklich umständlich...
Re: Variable auf importierte Definition anwenden
Verfasst: Samstag 20. November 2021, 21:34
von __deets__
Argumente übergibt man an Funktionen. Statt den Zustand über globale Variablen, deren Namen man kennen muss, zu teilen.
Re: Variable auf importierte Definition anwenden
Verfasst: Samstag 20. November 2021, 23:14
von pflaf
Ach Mist ich bin blöd. Ich war so darauf fokussiert ein Minimalbeispiel zu erstellen, dass ich den wichtigsten Teil weggekürzt habe, wie dumm
Der Code sollte so aussehen:
Code: Alles auswählen
#definition.py
def x(text):
if k == 'y':
print(text)
elif k == 'n':
pass
else:
print("ERROR")
und
Code: Alles auswählen
from definition import x
k = input('[y/n]') #hier wird nun entweder 'y' oder 'n' eingegeben
x('Bei Input wurde "y" eingegeben')
so, jetzt hab ich's fünf mal durchgelesen es sollte jetzt stimmen. Die Variable die ich eingebe, möchte ich nicht direkt ausgeben, sondern für eine Bedingung verwenden, und nur wenn sie den Wert 'y' bekommt, soll der Text den ich in "main.py" (in der letzten Zeile als Argument der Funktion x) vorgebe geprintet werden. So wie es hier jetzt steht, bekomme ich die oben genannte Fehlermeldung.
Kurze Erklärung wie ich das verwenden möchte: Ich will in mein Programm Statusmeldungen einsetzen, die aber nur in einem "Testmodus" geprintet werden, da ich das Programm normalerweise 24/7 laufen lassen möchte und die Ausgaben nur brauche um beim coden zu sehen, bis wohin das Programm wie arbeitet.
Re: Variable auf importierte Definition anwenden
Verfasst: Samstag 20. November 2021, 23:58
von __deets__
Das ändert doch nichts. Dann musst du eben 2 Argumente übergeben.
Re: Variable auf importierte Definition anwenden
Verfasst: Sonntag 21. November 2021, 00:24
von pflaf
Ach ja klar, jetzt verstehe ich auch deine erste Antwort erst so richtig. Wenn ich mir es so überlege, ist es eigentlich recht offensichtlich. Danke!
Re: Variable auf importierte Definition anwenden
Verfasst: Sonntag 21. November 2021, 09:25
von Sirius3
Wenn Du Statusmeldungen ausgeben willst, dann benutze etwas fertiges, wie logging, und schreib das nicht selbst.
Re: Variable auf importierte Definition anwenden
Verfasst: Sonntag 21. November 2021, 13:49
von __blackjack__
Falls es noch kurzfristiger als Logging sein soll, also nur zur Fehlersuche und danach wieder raus, würde ich einen Blick auf das `icecream`-Package empfehelen.
Beim Logging für Anwendungen fand ich `loguru` auch immer sehr praktisch.