Ich habe eine Funktion, die eine Unterfunktion hat und ich möchte Variablen innerhalb der Unterfunktion initialisieren. Einfach,Setzen von Variablen in einer Funktion (Unterfunktion) aus einer Datei mit einer Variablen Dateiname
file = "foo"
def outerFunction():
def innerFunction():
var1 = 0
var2 = 1
var3 = 2
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
Ausgang: bar 0 1 2
Allerdings habe ich eine recht große Anzahl von Variablen in mehreren verschiedenen Dateien und ich möchte sie einfach in die Unterfunktion importieren, wenn die Unterfunktion aufgerufen wird. Angenommen, ich habe eine Datei bar.py
mit folgendem Inhalt:
var1=0
var2=1
var3=2
Dann ich den Code ändern
file = "foo"
def outerFunction():
def innerFunction():
from file import *
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
seinen Dieser zu einem Fehler führen wird, weil Python 2.7 es nicht mag, wenn Sie Verwenden Sie import
innerhalb einer Unterfunktion. Anstatt also können wir die __import__
Funktion direkt verwenden:
file = "foo"
def outerFunction():
def innerFunction():
__import__(file)
print file, var1, var2, var3
file = "bar"
innerFunction()
outerFunction()
Die Importmethode hier funktioniert, aber die Variablen nicht immer tatsächlich machen es in die Variablenliste der Unterfunktion, was zu einem Fehler, wenn ich zu drucken gehen die raus. Jetzt weiß ich, dass ich den Code zu
file = "foo"
def outerFunction():
def innerFunction():
f = __import__(file)
print file, f.var1, f.var2, f.var3
file = "bar"
innerFunction()
outerFunction()
ändern kann und es wird peachy arbeiten. Das ist aber nicht die Lösung, nach der ich suche. Ich möchte in der Lage sein, diese Funktionen zu importieren, ohne den Rest meines Codes zu ändern. Gibt es bessere Lösungen für dieses Problem?
Warum können Sie nicht Datei und Objekt erstellen und dann instanziieren? Dann könnten Sie einfach file.property (file.var1) verwenden oder sogar eine Getter-Funktion verwenden, wenn Sie Berechnungen durchführen möchten? – kyle
Sie scheinen etwas Verwirrung über das Python-Import-System zu haben. "Python 2.7 mag es nicht, wenn Sie den Import in eine Unterfunktion verwenden." Nein...In Python jeder Version können Sie unabhängig vom Gültigkeitsbereich keine Variablen in import-Anweisungen verwenden. "Die Importmethode funktioniert hier, aber die Variablen werden nicht zum lokalen Bereich hinzugefügt." Nun, nein, so funktioniert 'import x' in keiner Situation. Ich verstehe deinen dritten Punkt nicht wirklich. –
Wenn dies nur Einstellungen sind, sollten Sie sie vielleicht analysieren, anstatt zu versuchen, sie auszuführen. Zum Beispiel mit [configparser] (https://docs.python.org/3/library/configparser.html) – spectras