变量作用域

变量的作用域决定了变量的可访问性和生命周期。

作用域规定了在何处可以访问一个变量以及该变量何时被销毁。

Python中有四种主要的作用域类型:

1. 局部作用域 (Local Scope)
   - 局部变量是在函数内部定义的变量。
   - 这些变量只能在定义它们的函数内部访问。
   - 函数执行完毕后,局部变量会被销毁。

2. 封闭作用域 (Enclosing Scope)
   - 当一个函数内嵌在另一个函数中时,内层函数可以访问外层函数的变量。
   - 这种作用域称为封闭作用域。
   - 在Python 3中,可以通过`nonlocal`关键字来修改封闭作用域中的变量。

3. 全局作用域 (Global Scope)
   - 全局变量在整个程序的顶层定义,可以在任何地方访问(除了函数的局部作用域,除非使用`global`关键字)。
   - 使用`global`关键字可以在函数内部声明或修改全局变量。

# 定义全局变量a
 a = 100
 def testA():
     print(a)  # 访问全局变量a,并打印变量a存储的数据
 def testB():
     print(a)  # 访问全局变量a,并打印变量a存储的数据

4. 内置作用域 (Built-in Scope)
   - 内置作用域包含了Python自带的所有函数和模块。
   - 这些名称可以直接在程序中使用,无需导入。

下面是一个简单的例子来说明这些作用域的概念:

x = "global x"  # 全局变量

def outer():
    y = "enclosing y"  # 封闭作用域变量
    
    def inner():
        nonlocal y  # 使用nonlocal关键字访问封闭作用域的y
        z = "local z"  # 局部作用域变量
        print(z)  # 访问局部变量z
        print(y)  # 访问封闭作用域变量y
        print(x)  # 访问全局变量x
        y = "modified y"  # 修改封闭作用域变量y
        
    inner()
    print(y)  # 输出修改后的y值

outer()  # 调用外层函数
print(x)  # 输出全局变量x

在这个例子中:
- `x` 是一个全局变量。
- `y` 是一个封闭作用域变量,在`outer`函数中定义。
- `z` 是一个局部变量,在`inner`函数中定义。
- 使用`nonlocal y`允许我们在`inner`函数中修改`outer`函数中的`y`。

需要注意的是,Python使用LEGB规则来解析变量名:
1. Local (局部作用域)
2. Enclosing (封闭作用域)
3. Global (全局作用域)
4. Built-in (内置作用域)

这意味着当Python解释器查找一个变量时,它会按照这个顺序从最内层向外层搜索,直到找到变量为止。如果在所有这些作用域中都找不到变量,则会引发`NameError`异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值