命名空间和作用域

本文详细介绍了Python中的命名空间,包括namespace的概念、举例、类型和查找顺序,以及不同命名空间的生命周期。此外,还阐述了作用域的静态确定和动态使用,列举了全局、局部、内置和nonlocal作用域的特性,并分析了`global`和`nonlocal`关键字的区别。通过本文,读者将深入理解Python中名称的查找和作用域规则。
摘要由CSDN通过智能技术生成

一,namespace

  • namespace是名字到对象的映射,python里面的大部分命名空间由字典实现。如果有性能问题,会更改。

  • 命名空间的举例

    •存放内置函数的集合(abs()这种函数,和内建的异常)
    •模块中的全局名称
    •函数调用中的局部名称
    •某种意义,对象的属性集合
    不同命名空间的名称没得关系,比如两个模块里面都有show()函数,只要指明是哪个模块就行。

namesapce

  • 三种命名空间的区别
    • 内置名称(built-in names), Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等。

    • 全局名称(global names),模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。

    • 非局部和非全局之间得名称 nonlocal

    • 局部名称(local names),函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。(类中定义的也是)

    命名空间查找顺序:(从小到大)
    假设我们要使用变量 BITQIAN,则 Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间。
    如果找不到变量 BITQIAN,它将放弃查找并引发一个 NameError 异常:

int = 0
def test_namespace():
    int = 1
    def inner_show():
        int = 2
        print(int)
    inner_show()

test_namespace() # 2 local

def test_namesapce():
	int = 1
	def inner_show():
		print(int) # 1 nonlocal
	inner_show()

def test_namespace(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值