是的,Python 中内函数不能命名与外函数相同的变量,因为 Python 在查找变量名时是按照 LEGB 规则(即局部作用域 → 嵌套作用域 → 全局作用域 → 内置作用域)进行的。当内函数的变量名与外函数的变量名相同时,内函数会先在局部作用域中查找变量,如果找不到,就会到嵌套作用域中查找,这时就会找到外函数的同名变量,而不是内函数原本的变量,导致程序出错。
以下是一个示例:
def outer():
x = 1
def inner():
x = 2 # 这里的 x 会覆盖掉外函数中的 x
print(x)
inner()
print(x)
outer() # 输出结果为 2 1
在上面的示例中,外函数 outer
中定义了变量 x
并赋值为 1,在内函数 inner
中又定义了同名变量 x
并赋值为 2。如果此时在内函数中使用变量 x
,则会输出 2,而在外函数中使用变量 x
,则会输出 1。
如需在内函数中使用外函数的同名变量,可以使用 nonlocal
关键字将变量声明为外部变量,代码示例如下:
def outer():
x = 1
def inner():
nonlocal x # 声明变量 x 为外部变量
x = 2
print(x)
inner()
print(x)
outer() # 输出结果为 2 2
在这个示例中,使用 nonlocal
关键字将变量 x
声明为外部变量,这样内函数中的 x = 2
就会将外函数中的 x
的值也修改为 2,最终输出结果是 2 2。