如何区分在函数内部使用nonlocal和global的区别?
时间: 2024-10-07 17:07:10 浏览: 32
Python动态参数/命名空间/函数嵌套/global和nonlocal
在Python中,`nonlocal` 和 `global` 关键字用于管理函数内部变量的作用域。它们的主要区别在于:
1. **global** 关键字:当你在一个函数内部声明一个变量为全局变量(`global var`),那么这个变量实际上是全局作用域的一部分。在函数内对全局变量进行修改,会直接影响到全局变量的值。例如:
```python
x = 0
def foo():
global x
x = 5
foo() # x的值现在是5,因为我们在函数内部改变了它的全局值
```
这里,`x`被标记为global,所以在函数内部可以直接访问和修改。
2. **nonlocal** 关键字:在嵌套函数中,当你要引用并改变外部函数(非局部函数)中的变量时,需要使用`nonlocal`关键字。这表明该变量不是全局的,也不是当前函数的局部变量,而是上层函数的局部变量。如:
```python
def outer():
y = 0
def inner():
nonlocal y
y = 3
inner()
print(y) # 输出3,因为y在inner函数中被改变了,并影响了outer函数
outer()
```
在这个例子中,`y`在`inner`函数中使用`nonlocal`修饰,意味着它是在`outer`函数的作用域内的。
阅读全文