Zusammenfassung:

  • Innere Funktion: kann auf globale Variablen zugreifen, ohne sie zu ändern
  • Innere Funktion: Wenn eine globale Variable mit demselben Namen geändert wird, behandelt Python sie als lokale Variable
  • Der Aufruf des Variablennamens (z. B. print sum) vor dem Ändern der gleichnamigen globalen Variable in einer inneren Funktion löst Unbound-LocalError aus

Die im Programm gesetzte sum ist eine globale Variable, aber es gibt keine Definition von sum in der Funktion. Nach Pythons Regeln für den Zugriff auf lokale und globale Variablen: Bei der Suche nach einer Variablen sucht Python zuerst im lokalen Gültigkeitsbereich. Wird die Variable im lokalen Gültigkeitsbereich nicht gefunden, sucht Python diese Variable in den globalen Variablen. Wird sie nicht gefunden, wird eine Ausnahme ausgelöst (NAMEERROR oder Unbound-LocalError, abhängig von der Python-Version.)

Wenn eine innere Funktion auf eine gleichnamige Variable aus einer äußeren Funktion oder eine globale Variable verweist und diese Variable ändert, behandelt Python sie als lokale Variable. Außerdem wird ein Fehler gemeldet, weil es keine Definition oder Zuweisung von sum in der Funktion gibt.

Bei den folgenden zwei Programmen wird beim bloßen Zugriff auf eine globale Variable oder deren Änderung kein Fehler gemeldet~

Zugriff auf die globale Variable:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys

sum=5
def add(a=1,b=3):
    print a,b
    print sum   #仅仅访问 
add(4,8)
print sum

Das Ausgabeergebnis ist:

4 8
5
5

Das Ändern einer gleichnamigen globalen Variablen wird als lokale Variable behandelt:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys
sum=5
def add(a=1,b=3):
    print a,b
     #内部函数有引用外部函数的同名变量或者全局变量,并且对这个变量有修改.那么python会认为它是一个局部变量
    sum=b+a #在函数内部修改
    print sum
add(4,8)

Das Ausgabeergebnis ist:

4 8
12

Das folgende Programm meldet einen Fehler, weil "wenn eine innere Funktion auf eine gleichnamige Variable aus einer äußeren Funktion oder eine globale Variable verweist und diese Variable ändert, behandelt Python sie als lokale Variable, und weil es keine Definition oder Zuweisung von sum in der Funktion gibt, wird ein Fehler gemeldet:"

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys
sum=5
def add(a=1,b=3):
    print a,b
    print sum  #内部函数引用同名变量,并且修改这个变量。python会认为它是局部变量。因为在此处print之前,没有定义sum变量,所以会报错(建议与情况一比较,备注:此处只是比上例先print sum)
    sum=b+a
    print sum
add(4,8)
print sum

Fehlermeldung:

4 8
Traceback (most recent call last):
...
...
...
UnboundLocalError: local variable 'sum' referenced before assignment

Wenn im Programm auf eine globale Variable zugegriffen wird und ihr Wert geändert werden muss, kann man:globalSchlüsselwort verwenden, das diese Variable in der Funktion als globale Variable deklariert.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys

sum=5
print '改变之前:sum=',sum
def add(a=1,b=3):
    global sum
    print 'add 函数中:sum=',sum
    sum=b+a
    print '函数中改变之后:sum= ',sum
add(4,8)
print '改变之后 sum=',sum

Das Ausgabeergebnis ist:

改变之前:sum= 5
add 函数中:sum= 5
函数中改变之后:sum=  12
改变之后 sum= 12

Original-URL: https://blog.csdn.net/my2010sam/article/details/17735159