python命名空间与作用域

命名空间与作用域

一、命名空间:

保存程序中的变量名和值的地方,本质是一个字典,其作用是用来记录变量名称和值,变量名在字典中充当key,值充当value。

命名空间分为三种:

1.局部命名空间:函数都有自己的命名空间,记录函数的变量,参数。2.全局命名空间:模块拥有的空间,记录了模块变量,函数,类和导入模块。3.内置命名空间:任何模块均可访问,放着内置函数和异常。

对于命名空间在执行的过程需要注意两个容易混淆的东西:
第一个代码加载过程:

内置命名空间(程序运行前加载)­---->全局命名空间(当程序运行的时候加载全局命名空间)-----­>局部命名空间(函数调用的时候加载)

第二个查找顺序:

当前 (嵌套的或 lambda) 函数的命名空间中搜索 -->在父函数的命名空间中搜索 -->模块命名空间中搜索–>在内置命名空间中搜索 (在哪里查找到就停止搜索)

代码:
name="snowdream"     #全局命名空间
def func():           #局部命名空间
    name="snow"
    print(name)
func()

结果:

在这里插入图片描述

二、作用域:


是变量在程序中的可应用范围这里访问

的顺序容易与命名空间混淆,我们知道作用域分为四类:局部作用域(Loca)、嵌套作用域(Enclosing)、全局作用域(Global)、内建作用域(Built­in)。其中访问顺序为:局部作用域(Loca)–>嵌套作用域(Enclosing)–>全局作用域(Global)–>内建作用域(Built­in) [从第一处能够找到这个变量名的地方停下来。如果变量名在整个的搜索过程 中都没有找到,Python就会报错]总结:我认为命名空间和作用域的关系:命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键值对的字典,作用域定义了命名空间中的变量能够在多大范围内起作用。

代码:
id=10  ##全局作用域
def outter():
    id=11     #嵌套作用域
    def inner ():
        id=12  #内建作用域
        print(id)
    inner()
outter()
结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值