在 Python 中,每个函数都有自己的命名空间,用于存储函数内定义的变量。变量名只在相应的命名空间中可见,因此同名变量可以存在于不同的命名空间中而不会相互干扰。
例如:
def my_func():
count = 1
print(count)
my_func() # 输出 1
print(count) # 报错,count 未定义
在上面的例子中,my_func()
函数内定义了一个变量 count
,值为 1
。在函数内部输出 count
的值,输出为 1
。但是,函数外部没有定义 count
变量,因此会报错。
在 Python 中,函数可以嵌套定义。内部函数可以访问外部函数的变量,但是外部函数不能访问内部函数的变量。如果内部函数定义了同名的变量,那么内部函数的变量会覆盖外部函数的同名变量。
例如:
def outer_func():
count = 0
def inner_func():
nonlocal count # 声明 count 为外部函数的变量
count += 1
print(count)
inner_func() # 输出 1
print(count) # 输出 1
outer_func()
在上面的例子中,outer_func()
函数内定义了一个变量 count
,值为 0
。内部定义了一个函数 inner_func()
,并访问了外部函数的变量 count
,将其值加 1
并输出 1
。再次输出外部函数的变量 count
,输出为 1
。
在内部函数中修改外部函数的变量,需要使用 nonlocal
关键字来声明变量是外部函数的变量。如果不声明,Python 会将其认为是新的局部变量,导致外部函数的变量没有被修改。