python基础11 名称空间

146 阅读3分钟

名称空间

名称空间的介绍

  • 名称空间就是变量名与数据值之间绑定关系的地方
    • 在内存空间中申请一块内存空间存储数据值,然后绑定变量名,变量鸣与数据值绑定的关系就会被存储到名称空间中,之后使用的相同变量名都是去名称空间里查找对应的数据值
    • 使用del删除的不是数据值,而是变量名与变量名与数据值之间的绑定关系

名称空间的分类

  • 1.内置名称空间
    • 在python解释器运行时就已经创建的空间,可以直接使用的名字(len(),print(),input()等)
  • 2.全局名称空间
    • 在python代码运行过程中创建的变量名,最外层的函数名,类名会在该空间存入
      1.普通代码中的变量名
      2.分支,循环结构中的变量名
      3.定义函数的函数名
      4.定义类的函数名
    
  • 3.局部名称空间
    • 函数体代码运行过程产生的名字会存入该空间

名称空间的存活周期

  • 内置名称空间
    • python解释器打开时创建,关闭时删除
  • 全局名称空间
    • 代码文件运行时创建,运行结束时删除
  • 局部名称空间
    • 函数体代码运行时创建,运行结束时删除

名称空间的查找顺序

  • 从自己当前所在空间依次往外围查找(局部>>全局>>内置)

名称空间的作用域

  • 内置名称空间与全局名称空间在程序全局的任何位置都能使用
  • 局部名称空间在在自己局部空间的位置使用

局部名称空间

局部名称空间复杂情况

  • 1.同一级别的两个局部名称空间默认情况下,不能互相使用彼此函数内的变量名
错误案例:
def num1():
    num = 12
    print(age)
def num2():
    age = 20
    print(num)
num1()
num2()                      # 程序报错
正确案例: 
def num1():
    num = 12
    print(num)
def num2():
    age = 20
    print(age)
num1()
num2()                      # 函数在定义阶段其实名字的查找顺序就已经固定死了

global与nonlocal关键字

  • 使用(global 变量名)可以对全局中的同变量名的数据进行操作
    • 局部名称空间出现新的名字会在局部名称空间中存储。
    • 在局部修改全局的变量名的数据可以使用global
    • 可变类型数据修改无需关键字,所以global用于修改不可变类型的数据。
    变量名 = 数据值
    def 函数名():
        global 变量名
        变量名 = 新数据值
        print(变量名)  
    函数名()              
    print(变量名)         # 局部全局都为新数据值
    
  • 使用nonlocal 可以在内层局部空间修改外层局部空间的不可变类型的数据

函数名的多种使用方式

  • 1.函数名可以被用来多次赋值(函数名与变量名使用一致)

  • 2.函数名可以被当作函数的实参

  • 3.函数名可以被当作函数的返回值

  • 4.函数名还可以当作容器类型里面的数据值