命名空间&作用域

本文详细介绍了Python中的命名空间和作用域。命名空间是名称到对象的映射,分为内置、全局和局部三种类型,具有不同的生命周期。作用域是直接访问命名空间的代码区域,包括局部、嵌套、全局和内建四种。文中通过示例说明了`global`和`nonlocal`关键字在修改全局和嵌套作用域变量时的应用。
摘要由CSDN通过智能技术生成

命名空间

概念

命名空间(namespace)是名称到对象的映射,当前大部分命名空间都是通过 Python 字典来实现的,它的主要作用是避免项目中的名字冲突,每一个命名空间都是相对独立的,在不同的命名空间中可以同名,在相同的命名空间中不可以同名。

种类

命名空间主要有以下三种:

  • 内置:主要用来存放内置函数、异常等,比如:abs 函数、BaseException 异常。
  • 全局:指在模块中定义的名称,比如:类、函数等。
  • 局部:指在函数中定义的名称,比如:函数的参数、在函数中定义的变量等。

生命周期

通常在不同时刻创建的命名空间拥有不同的生命周期,看一下三种命名空间的生命周期:

  • 内置:在 Python 解释器启动时创建,退出时销毁。
  • 全局:在模块定义被读入时创建,在 Python 解释器退出时销毁。
  • 局部:对于类,在 Python 解释器读到类定义时创建,类定义结束后销毁;对于函数,在函数被调用时创建,函数执行完成或出现未捕获的异常时销毁。

作用域

概念

作用域是 Python 程序可以直接访问命名空间的文本区域(代码区域),名称的非限定引用会尝试在命名空间中查找名称,作用域是静态的,命名空间是随着解释器的执行动态产生的,因此在作用域中访问命名空间中的名字具有了动态性,即作用域被静态确定,被动态使用。

种类

Python 有如下四种作用域:

  • 局部:最先被搜索的最内部作用域,包含局部名称。
  • 嵌套:根据嵌套层次由内向外搜索,包含非全局、非局部名称。
  • 全局:倒数第二个被搜索,包含当前模块的全局名称。
  • 内建:最后被搜索,包含内置名称的命名空间。

在这里插入图片描述

Python 中会按上图所示作用域由内向外去搜索名字。

再通过具体代码来对作用域作进一步了解,如下所示:

# 全局作用域
g = 1
def outer(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值