作用域

作用域

【一】什么是作用域

  • 变量的作用域
  • Python是静态作用域,变量的作用域源于它在代码中的位置
  • 在不同的位置,可能有不同的命名空间,命名空间是变量作用域的体现形式

【二】一个例子

  • 整个电脑系统,硬盘和系统 --->前人约定俗成
  • 名称空间 --->内建 局部 全局
  • 存放变量名和变量关系的地方 --->内存中/硬盘中

【三】四种作用域

【1】内置作用域

Python解释器自带的作用域

【2】全局作用域

全局名称空间

【3】局部作用域

在函数内部或者是类内部的名称空间

a = 1
def func():
    b = 2
    print(a)
    print(b)
print(a)

print(b) # 报错,全局作用域不能使用局部作用域中的变量
    

【4】嵌套作用域

在函数内部的函数的名称空间

def outer():
    def inner():
        ...
    ...
在inner()里面的作用域就是嵌套作用域
a = 1
def func():
    b = 2
    def inner():
        c=3
        print(c)
        print(a)
        print(b)
    print(c)# 报错
print(c) # 报错
print(a)
print(b) # 报错
在局部修改全局变量
使用 global 在局部将局部变量的等级提升为全局
# 一般用在不可变数据类型上
a = 1
def func():
    global a
    a = '2'
    print(a)
func()
print(a)

局部变量等级提升后		提升前
2						2
2						1

【5】在内嵌函数中修改外部函数的变量

内嵌函数中修改外部函数的变量值不能使用global

使用nonlocal 来提升内嵌函数的变量的等级到外部

a = 1
def func():
    global a
    a = 2
    b = 3
    def inner():
        global b
        b = 4
        print(b)
    inner()
    print(b)

func()
inner()中的b  提升前  	提升后
			  4          4
			  3          3
global b 没有提升成功

使用nonlocalglobal b 改为 nonlocal b
			  提升前  	提升后
			  4          4
			  3          4

【6】LEGB规则

(1)作用域的加载顺序

  • B:built-in 内置变量
  • G:global 全局变量
  • L: locals() 局部变量
  • E:enclose function locals 内嵌变量

(2)作用域的查找顺序

  • 如果在全局
    • 全局 --> 内建
  • 如果在局部
    • 局部 -- >全局 --> 内建
posted @   随机昵称yi  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示