zoukankan      html  css  js  c++  java
  • Python的命名空间

    什么是命名空间

      在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
  • 相关阅读:
    阮一峰的网络日志 算法
    Problem 2184 逆序数还原
    vs项目中使用c++调用lua
    多例模式
    关于O_APPEND模式write的原子性
    清醒
    编译时,遇到Couldn't build player because of unsupported data on target platform的解决方式
    把JavaScript和CSS放到外部文件里
    SSM框架——具体整合教程(Spring+SpringMVC+MyBatis)
    MMORPG网页游戏斩仙录全套源代码(服务端+client)
  • 原文地址:https://www.cnblogs.com/heshike/p/10497337.html
Copyright © 2011-2022 走看看