Variablen-Gültigkeitsbereich-Problem

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
fischliii
User
Beiträge: 2
Registriert: Donnerstag 11. September 2014, 09:09

Hi, ich möchte folgenden Code zum Laufen bringen:

Code: Alles auswählen

import modul

a = 5
modul.do_sth()
print a

Code: Alles auswählen

def do_sth():
     a += 1
Wie viele sich denken will ich, dass main.py "6" ausgibt... Und ja, es muss mit einem externen Modul gelöst werden...

Vielen Dank!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@fischliii
``a`` befindet sich im Namensraum des Moduls. Wenn Du ``modul.do_sth`` aufrufst, befindest Du Dich im Namensraum von ``modul.do_sth``. Dort ist ``a`` nicht vorhanden. Der übliche und sinnvolle Weg, Werte eines Namensraumes in einen anderen zu bekommen, ist die Übergabe der Werte über Argumente, in Deinem Fall also:

Code: Alles auswählen

def do_sth(any_argument):
    return any_argument + 1
Auch wenn das anfangs umständlich erscheint ist die Trennung der Namensräume unabdingbar, um sauberen, überschaubaren und wartbaren Code zu schreiben. Sicherlich wirst Du früher oder später auf globale Namen (Variablen) stoßen. Lass die Finger davon! Wenn sich alle Namen in einem Topf befinden, wirst Du im Chaos landen... ;-)

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@fischliii: Ich schliesse mich mutetella an: Ganz schlechte Idee so etwas zu wollen.

Edit: Einfachste Lösung die dem nahekommt, aber auch nicht wirklich gut ist, wäre das Modul beim Aufruf als Argument zu übergeben.
Antworten