Variable auf importierte Definition anwenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pflaf
User
Beiträge: 10
Registriert: Samstag 20. November 2021, 21:02

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:

Code: Alles auswählen

#definition.py
def x():
    print(k)

Code: Alles auswählen

#main.py
from definition import x
k = 5
x()
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

Code: Alles auswählen

k=input()
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...
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Argumente übergibt man an Funktionen. Statt den Zustand über globale Variablen, deren Namen man kennen muss, zu teilen.

Code: Alles auswählen

der x(k):
    print(k)
pflaf
User
Beiträge: 10
Registriert: Samstag 20. November 2021, 21:02

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 :roll:

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.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ändert doch nichts. Dann musst du eben 2 Argumente übergeben.
pflaf
User
Beiträge: 10
Registriert: Samstag 20. November 2021, 21:02

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!
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du Statusmeldungen ausgeben willst, dann benutze etwas fertiges, wie logging, und schreib das nicht selbst.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten