2017-09-15 4 views
0

Ich habe eine Frage bezüglich Globals() in PythonGlobals() Anwendungsbereich innerhalb einer Funktion

Mein Beispielcode

b=9 
def a1(): 
'kkk' 

a1() 
print globals() 

Ich habe Ausgabe b als globale

Da b global ist, ich erwarte ich es überall ändern So modifizierte ich meinen Code zu

b=9 
def a1(): 
'kkk' 
b=100 
a1() 
print globals() 

immer noch meine globals() sagt b wie 100. Warum b innerhalb der Funktion wird als lokaler Wert genommen, während meine globals() sagt seine globale?

Hinweis: Wenn ich das Schlüsselwort global b innerhalb der Funktion hinzufüge, wird es in global konvertiert. Meine Frage ist, warum b innerhalb der Funktion nicht geändert wurde, während globals() b als global deklarierte?

+0

Ihre Frage ist nicht direkt über diesen Fehler, aber es ist effektiv das gleiche: Warum ist eine Variable in einer Funktion lokal zugeordnet? –

Antwort

2

Weitere Informationen finden Sie unter Python docs. Kopieren des Texts für den Fall, dass die URL nicht funktioniert

In Python sind Variablen, die nur innerhalb einer Funktion referenziert werden, implizit global. Wenn einer Variablen irgendwo im Körper der Funktion ein Wert zugewiesen wird, wird angenommen, dass es sich um einen lokalen Wert handelt, es sei denn, sie wird explizit als global deklariert.

Obwohl zunächst etwas überraschend, erklärt ein Moment der Überlegung dies. Auf der einen Seite bietet die Anforderung global für zugewiesene Variablen eine Barriere gegen unbeabsichtigte Nebenwirkungen. Wenn global für alle globalen Referenzen erforderlich wäre, würden Sie jedoch global global verwenden. Sie müssten jeden Verweis auf eine integrierte Funktion oder auf eine Komponente eines importierten Moduls als global deklarieren. Dieses Durcheinander würde die Nützlichkeit der globalen Deklaration zur Identifizierung von Nebenwirkungen zunichtemachen.

1

innerhalb einer Funktion, es sei denn, Sie verwenden das Schlüsselwort global, ist es nicht globale Variable, die geändert wird. Stattdessen wird eine lokale Variable erstellt und zerstört, sobald sie nicht mehr im Gültigkeitsbereich ist.

1

Als Ihr Code b eine lokale Variable in a1 ist(), die globale Variable zu verwenden, sollten Sie zuerst das zu Python sagen und dann verwenden, wie folgt:

b=9 
def a1(): 
'kkk' 
global b 
b=100 

a1() 
print globals() 
+0

Meine Frage war warum Python b als global gemeldet, auch wenn ich nicht das Schlüsselwort 'global' in der Funktion verwendet? – syam

+0

Sie haben 'b' global definiert, dh es gibt keine Funktion oder Klasse. Mit global keyword wird kein globales definiert, sondern eine zuvor global definierte Variable in einer zu verwendenden Funktion – Serjik

Verwandte Themen