posts - 47,comments - 0,views - 26651

什么是命名空间

  在python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,解释器只是把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说一开始的时候函数并没有执行,只有当函数被调用和访问的时候,解释器才会开辟内部空间存放函数内部声明的变量,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数执行完毕而被清空。

  存放名字和值的关系的空间就是命名空间,我们的变量就是存储在这片空间中的。

命名空间的分类

1、全局命名空间:直接在py文件中函数外声明的变量都存放在全局命名空间;

2、局部命名空间:在函数中声明的变量会存放在局部命名空间;

3、内置命名空间:存放python解释器为我们提供的函数,如int,str,list这些都存放在内置命名空间;

加载顺序:

1、内置命名空间

2、全局命名空间

3、局部命名空间(函数被执行的时候)

取值顺序:

1、局部命名空间

2、全局命名空间

3、内置命名空间

作用域

  作用域就是作用范围,按照生效范围来看分为全局作用域和局部作用域。

  全局作用域:包含内置命名空间和全局命名空间,在整个文件的任何位置都可以使用(遵循从上到下逐行执行);

  局部作用域:在函数内部的命名空间;

  我们可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息。

global 和 nonlocal

global用于声明一个全局变量,如果在函数内部表示引用某个全局变量。

复制代码
def func():
    global a
    a = 3

func()
print(a)
>>>3 count
= 1 def func2(): global count count = 2 func2() print(count)
>>>2
复制代码

nonlocal用于在局部作用域中,对父级局部作用域或更外层局部作用域(非全局作用域)的变量的引用。

复制代码
def func():
    b = 2
    def func2():
        def func3():
            nonlocal b
            b = 5
        func3()
    func2()
    print(b)

func()
>>>5
复制代码

 

posted on   回忆唯U你  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示