python 函数的名称空间及作用域

Posted Yang-hao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 函数的名称空间及作用域相关的知识,希望对你有一定的参考价值。

一:名称空间

1:什么是名称空间:

  名称空间即:储存名字与值的内存地址关联关系的空间

2.名称空间的分类:

  内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等;

    生命周期为:在python解释器启动时创建,在解释器关闭时销毁

  全局名称空间:除了内置的,函数内的都是在全局名称空间中

    生命周期为:在执行文件时,创建全局名称空间,所有文件中的代码全部执行完毕后,销毁名称空间(即解释器关闭时)

  局部名称空间:只要在函数内的名称空间就是局部的

    生命周期为:调用函数时创建,函数执行完毕时就销毁

3.名称空间的加载顺序:内置的-->全局的-->局部的

   名称空间的查找顺序:局部名称空间-->全局名称空间-->内置名称空间(基于当前位置向上层空间查找)

 

二. 作用域

  域:区域,范围的意思

    全局名称空间和内置名称空间在使用上没有什么区别,而局部的名称空间只能在局部使用

  空间的范围:global 表示全局范围  就是所谓的全局作用域(globals 查看全局作用域的内容)

        local 表示局部作用域 

  总结:1.查找名称的顺序是基于当前位置向上层空间查找

     2.名称空间的嵌套关系是在函数定义阶段就固定死的,与调用位置无关

技术分享图片
# age=18
# def func2():
#     # 明确声明使用全局的变量age(修改a的值)
#     global age
#     age=19
# func2()
# print(age)
global 实例

运行结果为: 19

技术分享图片
a = 1
def func3():
    a = 10
    def inner():
        # 明确声明 要使用上一层的 a 如果上一层没有,则使用上上一层,但是不能使用全局中的a
        nonlocal a
        a = 100
        print(a)
    inner()
    print(这是func3中的a,a)
func3()
nonlocal 实例

运行结果为: 这是func3中的a 100

 

 

 

 

  

    

    

以上是关于python 函数的名称空间及作用域的主要内容,如果未能解决你的问题,请参考以下文章

Python--高阶函数函数嵌套名称空间及变量作用域闭包装饰器

013.Python之函数嵌套名称空间与作用域闭包函数

Python - 模块

Python/函数的嵌套和闭包

Python 名称空间与作用域

Python全栈之路Day19