python各个变量作用域
时间: 2024-12-27 21:20:55 浏览: 5
### Python 中不同变量的作用域
#### 全局作用域
全局作用域是指在模块级别定义的变量,这些变量在整个模块内都是可见和可访问的。一旦定义,在该模块内的任何地方都可以使用这些变量[^2]。
```python
global_var = "这是一个全局变量"
def function_example():
print(global_var)
function_example()
```
#### 局部作用域
局部作用域涉及的是那些只在其被创建的那个函数内部有效的变量。当函数执行完毕后,局部变量就会消失,不会影响到其他部分的代码逻辑。
```python
def create_local_variable():
local_var = "这是局部变量"
print(local_var)
create_local_variable()
print(local_var) # 这里会抛出 NameError 错误,因为local_var不在当前范围内
```
#### 封闭作用域
如果存在嵌套函数,则外部函数中定义而内部函数使用的变量属于封闭作用域。这种情况下,内部函数可以读取并修改来自外层函数的变量值,但对外界而言仍然是不可见的。
```python
def outer_function():
enclosed_var = "这是封闭作用域里的变量"
def inner_function():
nonlocal enclosed_var
enclosed_var += ", 被内部函数修改过"
print(enclosed_var)
inner_function()
outer_function()
```
#### 内置作用域
Python 提供了一组预定义的对象作为内置对象,比如 `len()` 函数或标准异常类如 `Exception` 。这些都是存在于最顶层的作用域——即所谓的“内置作用域”。尝试重新定义它们通常不是一个好主意,尽管技术上是可以做到这一点的。
```python
print(len([1, 2, 3])) # 使用内置的 len 函数
# 不建议这样做:
# def len(x): pass # 避免覆盖内置名称
```
#### 修改全局变量的方法
要在一个函数体内更改已经存在的全局变量,需要显式地通过 `global` 关键字声明这个意图;否则将会遇到未绑定本地错误(UnboundLocalError),这是因为默认情况下试图给一个名字赋新值会被认为是在创建一个新的局部变量而不是改变现有的全局变量[^4]。
```python
globally_defined = "原始状态下的全局字符串"
def modify_global():
global globally_defined
globally_defined += " 已经被改变了!"
print(globally_defined)
modify_global()
print(globally_defined)
```
阅读全文