• Pyhon的命名空间


    一: 概念

      我们给存放名字和值的关系的空间起一个名字叫命名空间. 我们的变量在存储的时候就是存储在这片空间中的.

      详细解释:

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

    二: 分类

      1.全局命名空间 : 我们直接在py文件中,函数外声明的变量都属于全局命名空间

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

      3. 内置命名空间 : 用于存放python解释器为我们提供的名字,比如list,tuple,str,int等

    三 : 顺序

      加载顺序: 内置命名空间 > 全局命名空间 > 局部命名空间(函数被执行的时候)

      取值顺序: 局部命名空间 > 全局命名空间 > 内置命名空间

    a = 10
    def func():
        a = 20
    print(a)
    func() # 20

    四 : 作用域

       也叫作用范围,按照生效范围可以分为全局作用域和局部作用域

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

       局部作用域 : 在函数内部使用

       可以使用globs()函数查看全局作用域中的内容,使用locas()函数查看局部作用域中的变量和函数信息

    a = 10
    def func():
        a = 40
        b = 20
        def abc():
            print("哈哈")
        print(a, b) # 这里使用的是局部作用域
        print(globals()) # 打印全局作用域中的内容
        print(locals()) # 打印局部作用域中的内容
    func()        

    五 : 两个关键字global和nonlocal

        首先我们写这样一个代码,首先在全局声明一个变量,然后在局部调用这个变量,并改变它的值

    a = 100
    def func():
        global a # 加了个global表示不不在局部创建这个变量了. 而是直接使用全局的a
        a = 28
        print(a)
    func()
    print(a)

        global表示,不再使用局部作用域中的变量了,改用全局的变量

    lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
    def func():
        lst.append("⻢马云云") # 对于可变数据类型可以直接进行访问. 但是不能改地址. 说白了. 不能赋值
        print(lst)
    func()
    print(lst)

        nonlocal表示在局部作用域中,调用父级命名空间中的变量

    a = 10
    def func1():
        a = 20
        def func2():
            nonlocal a
            a = 30
            print(a)
        func2()
        print(a)
    func1()
    结果:
    加了nonlocal
    30
    30
    不加nonlocal
    30
    20
  • 相关阅读:
    uIP的ARP协议分析
    如何使函数不生成执行代码
    计算机网络基础
    [Hive
    [Hive
    [Hive
    [Hive
    [Hive
    [Hive
    [Hive
  • 原文地址:https://www.cnblogs.com/DoingBe/p/9416195.html
Copyright © 2020-2023  润新知