Python-2.6.1 名称空间

本文详细介绍了Python中的三种名称空间:内置名称空间、全局名称空间和局部名称空间。包括它们的存活周期、查找顺序及示例代码,帮助读者理解Python变量的作用域。

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

名称空间分为三种:

一、内置名称空间
存放的名字:存放的Python解析器内置的名字
存活周期:Python解析器启动则产生,Python解析器关闭则销毁
例如:int、input…

二、全局名称空间
存放的名字:除去函数内定义、内置的,剩下的都是全局名称空间的名字
存活周期:Python文件执行则产生,Python文件运行完毕后则销毁

三、局部名称空间
存放的名字:在调用函数时,运行函数体代码过程中产生函数的名字
存活周期:在调用时存活,函数调用完毕后则销毁

四、顺序

加载顺序:内置名称空间>全局名称空间>局部名称空间

销毁顺序:局部名称空间>全局名称空间>内置名称空间

查找顺序:当前所在位置向上一层一层查找
如果当前在局部空间:局部名称空间—>全局名称空间->内置名称空间
如果当前在全局名称空间:全局名称空间->内置名称空间

示例1:

def func():
    print(x)


x = 111
func() # x在调用函数之前被定义成全局变量,全局名称空间

结果:

111

示例2:

x = 1


def func():
    print(x) # 名称空间的“嵌套”关系是以函数定义阶段为准,与调用位置无关


def foo():
    x = 22222222222
    func()


foo()

结果:

1

示例3:

input = 1111111111


def func_1():
    def func_2():
        input = 3333333333
        print(input)
    input = 2222222222

    func_2()


func_1()    # 结果:3333333333(调自己的局部名称空间)
input = 1111111111


def func_1():
    def func_2():
        # input = 3333333333
        print(input)
    input = 2222222222

    func_2()


func_1()  # 结果:2222222222(调上一层函数的局部名称空间)

input = 1111111111


def func_1():
    def func_2():
        # input = 3333333333
        print(input)
    # input = 2222222222

    func_2()


func_1() # 结果:1111111111(调全局名称空间)
# input = 1111111111


def func_1():
    def func_2():
        # input = 3333333333
        print(input)
    # input = 2222222222

    func_2()


func_1() 

结果:
<built-in function input> (调的内置名称空间)

示例4:

x = 111


def func():
    print(x) # 虽然语法有问题,但是x仍然取得是局部名称空间
    x = 222


func()

结果:

UnboundLocalError: local variable 'x' referenced before assignment
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值