python 命名空间和作用域

本文深入解析Python中的命名空间与作用域概念,包括内置、全局和局部命名空间的区别,以及它们如何影响变量的访问与修改。同时,介绍了global关键字的使用场景,以及globals和locals函数的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二者的关系命名空间在python解释器中是以字典的形式存在的,是以一种可以看得见摸得着的实体存在的。大部分的命名空间都是由字典来实现的,里面存储的是键就是名字,值就是名字所指向的位于内存中的对象。作用域是python解释器定义的一种规则,该规则确定了运行时变量查找的顺序,是一种形而上的虚的规定。

命名空间有三种:

1.内置命名空间:里面存放的是python解释器一加载进内存就能直接使用的变量名,函数名,关键字等。python解释器已启动就会在内存空见中开辟一个内置命名空间。

2.全局命名空间:里面存放的是除函数里面的所有用户自定义的变量名和函数名,在程序从上到下执行的过程中会依次加载进全局命名空间。

3.局部命名空间:里面存放的是函数内部的所有用户自定义的变量名和函数名,在执行(调用)函数的时候加载进局部命名空间,当函数执行完后这个明明空间就消失了。(每一个递归函数都拥有自己的命名空间)

作用域有两种:

1.全局作用域:作用在全局,内置命名空间和全局命名空间里面的名字都属于全局作用域。

2.局部作用域:作用在局部,局部命名空间的名字属于全局作用域。

 

global关键字

对于属于全局作用域的不可变数据类型,在局部作用域中可以直接引用,但不能直接修改,修改前应先用global关键字进行声明。

a = 1
def test():
    a = 2	
test()
print(a)  # 1
a = 1
def test():
    global a
    a = 2
test()
print(a)  # 2

globals和locals内置函数

globals:获取全局作用域里面的所有名字

locals:获取全局还是局部作用域里面的名字由调用locals的位置决定

a = 1
def test():
    s1 = "s1"
    s2 = "s2"
    print(globals())
    print(locals())
test()
print(globals())
print(locals())

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值