Greifen Sie auf eine Funktionsvariable außerhalb der Funktion zu, ohne 'global' zu verwenden
Ich versuche, Zugriff auf eine lokale variable, Funktion außerhalb der Funktion in Python. So, zum Beispiel,
bye = ''
def hi():
global bye
something
something
bye = 5
sigh = 10
hi()
print bye
Den oben funktioniert wie es sollte. Da möchte ich herausfinden, ob ich zugreifen kann bye
außerhalb hi()
ohne Verwendung global bye
habe ich versucht:
def hi():
something
something
bye = 5
sigh = 10
return
hi()
x = hi()
print x.bye
Den oben genannten gibt AttributeError: 'NoneType' object has no attribute 'bye'
.
Dann habe ich versucht:
def hi():
something
something
bye = 5
sigh = 10
return bye
hi()
x = hi()
print x.bye
Dieses mal ist es nicht sogar ein Fehler.
So, gibt es eine Möglichkeit, den Zugriff auf eine lokale variable, Funktion (bye
) außerhalb Ihrer Funktion (hi()
) ohne Verwendung von globals und ohne Druck von Variablen sigh
? (Frage wurde bearbeitet, gehören sigh
nach @hcwhsa 's Kommentar unten.
InformationsquelleAutor der Frage user2480526 | 2013-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie tun, etwas entlang dieser Linien (die arbeitete in beiden Python v2.7.14 und v3.6.3 Wann getestet habe ich es/Sie):
Funktionen sind Objekte in Python können beliebige Attribute zugeordnet werden können.
Wenn du gehst, das zu tun diese Art der Sache oft, Sie könnten etwas umzusetzen, allgemeiner, indem Sie eine Funktion erstellen decorator fügt hinzu, dass eine
this
argument bei jedem Aufruf der eingerichteten Funktion. Dieses arg wird, geben Funktionen einen Weg, um auf sich selbst verweisen und ist ähnlich wie die Instanz-argument-Klasse Methoden erhalten Sie automatisch als erstes argument die in der Regel den Namenself
—ich wählte den Namenthis
um Verwirrung zu vermeiden. Es kann benannt werden, was Sie wollen.Hier ist ein Beispiel für diesen Ansatz:
InformationsquelleAutor der Antwort martineau
Das problem ist, Sie riefe drucken x.bye, nachdem Sie x als string. Beim ausführen
x = hi()
läuft es hi() und setzt den Wert von x auf 5 (der Wert von bye; dabei wird NICHT der Wert von x als eine Referenz auf die bye variable selbst). EX:bye = 5; x = bye; bye = 4; print x;
Drucke 5, nicht 4Außerdem müssen Sie nicht haben ausführen hi() zweimal, nur laufen
x = hi()
nichthi();x=hi()
(die Art, Sie hatten es ausgeführt wurde hi(), nichts zu tun mit den sich ergebenden Wert von 5, und dann erneutes ausführen des gleichen Hallo() auf und speichern den Wert von 5 an die variable x.So voller code sollte
Wenn Sie wollte, um wieder mehrere Variablen, eine Möglichkeit wäre die Verwendung einer Liste oder dictionary, je nachdem, was Sie brauchen.
ex:
mehr auf python Wörterbücher http://docs.python.org/2/tutorial/datastructures.html#dictionaries
InformationsquelleAutor der Antwort John
Könnten Sie tun, etwas entlang dieser Linien:
InformationsquelleAutor der Antwort Thomas Corll
InformationsquelleAutor der Antwort Allan Mwesigwa