如何在Python中在相同的内部函数中使用本地、非本地和全局变量而不出错



当尝试在inner()中使用本地和非本地变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
x = 10 # Local variable
x += 1
print(x)

nonlocal x # Non-local variable
x += 1
print(x)
inner()
outer()

或者,当尝试在inner()中使用全局和非局部变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
global x # Global variable
x += 1
print(x)

nonlocal x # Non-local variable
x += 1
print(x)
inner()
outer()

我得到了以下错误:

SyntaxError:名称"x"在非本地声明之前使用

并且,当尝试在inner()中使用局部和全局变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():        
x = 10 # Local variable
x += 1
print(x)

global x # Global variable
x += 1
print(x)
inner()
outer()

或者,当尝试在inner()中使用非局部和全局变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
nonlocal x # Non-local variable
x += 1
print(x)

global x # Global variable
x += 1
print(x)
inner()
outer()

我得到了以下错误:

SyntaxError:名称"x"在全局声明之前使用

此外,当尝试在inner()中定义非局部和全局变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
nonlocal x # Non-local variable
global x # Global variable
inner()
outer()

或者,当试图在inner()中定义全局和非局部变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
global x # Global variable
nonlocal x # Non-local variable
inner()
outer()

我得到了以下错误:

SyntaxError:名称'x'是非局部和全局

当尝试在inner()中定义局部和非局部变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
x = 10 # Local variable
nonlocal x # Non-local variable
inner()
outer()

我得到了以下错误:

SyntaxError:名称"x"在非本地声明之前被赋值

并且,当尝试在inner()中定义局部和全局变量x时,如下所示:

x = 0
def outer():
x = 5
def inner():
x = 10 # Local variable
global x # Global variable
inner()
outer()

我得到了以下错误:

SyntaxError:名称"x"在全局声明之前被分配

那么,如何在同一内部函数中使用局部、非局部和全局变量而不会出现上述错误?

你不能这么做。当您知道要使用非本地名称时,可以避免创建覆盖非本地名称的本地名称。

x = 0
def outer():
y = 5  # Not x; inner wants to use the global x
def inner():
global x
x += 1
print(x)

nonlocal y
y += 1
print(y)
inner()
outer()

最新更新