Python的nonlocal与global的区别是什么?
时间: 2024-12-13 15:22:50 浏览: 3
在Python中,`nonlocal` 和 `global` 关键字都用于指示变量的作用域超越了当前作用域,但是它们之间有明显的区别:
1. **`global`**:当你在一个函数内部想要引用并修改外部函数(不是全局作用域)的变量时,你需要使用 `global` 关键字声明。这样做是为了告诉Python解释器这个变量是在更高级别的作用域中定义的,例如:
```python
def outer_func():
x = 10
def inner_func():
global x
x = 20
outer_func()
inner_func()
print(x) # 输出:20
```
在这里,`inner_func()` 中的 `x` 修改了 `outer_func()` 的 `x`。
2. **`nonlocal`**:`nonlocal` 关键字则是用于在嵌套函数(即函数内的函数)中访问和修改外部嵌套函数的变量。它比 `global` 更具限制性,因为非局部变量只能存在于直接的外层函数中,而不是整个程序的全局作用域:
```python
def parent_func():
y = 30
def child_func():
nonlocal y
y = 40
child_func()
print(y) # 输出:40
```
在这个例子中,`child_func()` 可以通过 `nonlocal` 修改 `parent_func()` 内部的 `y`。
总结来说,`global` 指的是全局范围,而 `nonlocal` 则是指向上一层(即嵌套函数的父级)作用域。如果不需要跨过所有嵌套层次,只影响当前嵌套层次,应该使用 `nonlocal`。
阅读全文