Was ist eine globale Aussage? Und wie wird es benutzt? Ich habe Python's official definition gelesen;
jedoch macht es mir nicht viel Sinn.In Python was ist eine globale Aussage?
Antwort
Jeden "Variable" in Python ist begrenzt bis zu einem gewissen Umfang. Der Umfang einer Python-Datei ist der Modulumfang. Beachten Sie Folgendes:
#file test.py
myvariable = 5 # myvariable has module-level scope
def func():
x = 3 # x has "local" or function level scope.
Objekte mit lokalem Geltungsbereich sterben, sobald die Funktion beendet und kann nie abgerufen werden (es sei denn, Sie return
ihnen), aber innerhalb einer Funktion, können Sie Variablen in Modulebene Umfang zugreifen können (oder jede enthält scope):
myvariable = 5
def func():
print(myvariable) # prints 5
def func2():
x = 3
def func3():
print(x) # will print 3 because it picks it up from `func2`'s scope
func3()
Sie können jedoch nicht Zuordnung auf dieser Referenz verwenden und erwarten, dass es zu einem äußeren Umfang propagiert wird:
myvariable = 5
def func():
myvariable = 6 # creates a new "local" variable.
# Doesn't affect the global version
print(myvariable) # prints 6
func()
print(myvariable) # prints 5
Jetzt sind wir endlich zu global
. Das Schlüsselwort global
ist die Art und Weise, wie Sie Python mitteilen, dass eine bestimmte Variable in Ihrer Funktion auf globaler Ebene (auf Modulebene) definiert ist.
myvariable = 5
def func():
global myvariable
myvariable = 6 # changes `myvariable` at the global scope
print(myvariable) # prints 6
func()
print(myvariable) # prints 6 now because we were able
# to modify the reference in the function
Mit anderen Worten, können Sie den Wert von myvariable
im Modul-Rahmen aus func
ändern, wenn Sie das global
Schlüsselwort verwenden.
Als beiseite, können Bereiche beliebig tief verschachtelt werden:
def func1():
x = 3
def func2():
print("x=",x,"func2")
y = 4
def func3():
nonlocal x # try it with nonlocal commented out as well. See the difference.
print("x=",x,"func3")
print("y=",y,"func3")
z = 5
print("z=",z,"func3")
x = 10
func3()
func2()
print("x=",x,"func1")
func1()
Jetzt in diesem Fall keine der Variablen im globalen Bereich deklariert werden, und in python2, gibt es keine (leicht/clean) Möglichkeit, den Wert x
im Bereich func1
von func3
zu ändern. Aus diesem Grund wurde das Schlüsselwort nonlocal
in python3.x eingeführt. nonlocal
ist eine Erweiterung von global
, mit der Sie eine Variable ändern können, die Sie von einem anderen Bereich in welchem Umfang auch immer abgerufen haben.
+1 für eine gründliche Erklärung. Möglicherweise möchten Sie jedoch die Ergebnisse der Druckanweisungen anzeigen. –
@StevenRumbalski - Fertig. Guter Vorschlag. – mgilson
Ich habe das selbst getestet, nachdem ich deine Antwort gelesen habe, und mein Verständnis hat sich in diesem Bereich stark verbessert. Vielen Dank! – Capurnicus
Im Wesentlichen teilt es dem Interpreter mit, dass die angegebene Variable auf der globalen Ebene geändert und zugewiesen werden sollte, anstatt auf der lokalen Standardstufe.
a = 1
def f():
a = 2 # doesn't affect global a, this new definition hides it in local scope
a = 1
def f():
global a
a = 2 # affects global a
Sie können eine globale Variable in anderen Funktionen nutzen, indem sie als global in jeder Funktion zu erklären, dass es
Python modifiziert möchte sicherstellen, dass Sie das wirklich wissen, was Sie mit gerade spielen, indem Sie explizit verlangt das globale Schlüsselwort
Siehe this answer
mgilson hat einen guten Job gemacht, aber ich möchte noch etwas hinzufügen.
list1 = [1]
list2 = [1]
def main():
list1.append(3)
#list1 = [9]
list2 = [222]
print list1, list2
print "before main():", list1, list2
>>> [1] [1]
main()
>>> [1,3] [222]
print list1, list2
>>> [1, 3] [1]
Innerhalb einer Funktion nimmt Python jede Variable als lokale Variable , wenn Sie es als global deklarieren, oder Sie eine globale Variable zugreifen.
list1.append(2)
war möglich, weil Sie auf die "list1" zugreifen und Listen veränderbar sind.
war möglich, weil Sie eine lokale Variable initialisieren.
Allerdings, wenn Sie uncomment # list1 = [9], werden Sie
UnboundLocalError: local variable 'list1' referenced before assignment
bekommen Es bedeutet, dass Sie versuchen, eine neue lokale Variable ‚list1‘ zu initialisieren, aber es war schon vorher erwähnte, und Sie sind außerhalb des Umfangs, um es neu zuzuweisen.
Um den Gültigkeitsbereich einzugeben, deklarieren Sie 'list1' als global.
empfehle ich Ihnen this sogar zu lesen, obwohl es ein Tippfehler am Ende ist.
- 1. Was ist eine vorbereitete Aussage?
- 2. Was ist eine globale Methode?
- 3. Was ist eine globale Transaktion?
- 4. Was ist der Zweck der `Pass` Aussage?
- 5. Was ist das Problem in dieser Aussage?
- 6. Was ist eine "if" Aussage auf der Ebene von Transistoren?
- 7. Ist MERGE eine atomare Aussage in SQL2008?
- 8. Was ist das globale Standard-Timeout
- 9. Python if Aussage Effizienz
- 10. Was ist die Bedeutung dieser Aussage in Javascript
- 11. Was ist der drupal Weg, globale Konstanten zu definieren?
- 12. Was ist eine exotische Funktionssignatur in Python?
- 13. Was ist die VB-Aussage "Chr (0)" in C# äquivalent?
- 14. Was ist $ in Python?
- 15. C++ - Was bedeutet diese Aussage?
- 16. Was ist die Standardspeicherklasse für globale Variablen?
- 17. Swift: Was bedeutet diese Aussage in Extension?
- 18. ist es gültige Aussage?
- 19. Python globale Variable Scoping
- 20. Python globale Protokollierung
- 21. Was ist der Unterschied zwischen einem Ausdruck und einer Aussage?
- 22. Was ist falsch mit meiner Rückkehr Aussage und statische Methode
- 23. was ist falsch mit dieser Aussage (Anzahl von 0-9)
- 24. Python: Wenn durch eine Variable (Wort), gefolgt Aussage
- 25. Python Django Globale Variablen
- 26. Was ist der Vorteil von "Wenn mit einer kurzen Aussage"
- 27. Was ist eine plattformübergreifende Möglichkeit, eine Sounddatei in Python abzuspielen?
- 28. Python 'mit' Aussage versus 'mit .. als'
- 29. Was ist der einfachste Weg, globale Tastaturkürzel in Windows hinzuzufügen?
- 30. Python RegExp globale Flagge
nur eine Bemerkung, 2.4 ist eine alte Version von Python, die eigentliche Referenz für [Python 2.X Version ist hier] (http://docs.python.org/2/reference/simple_stmts.html#global) –
Python 3 kommt mit der neuen Anweisung 'nonlocal' zusammen mit' global', siehe auch. –
@TahaJahangir - Das ist ein guter Punkt. Ich habe auch ein wenig Klappentext auf "nonlocal" in meiner Antwort wegen Ihres Kommentars hinzugefügt. Vielen Dank! – mgilson