名称空间与作用域

Posted

tags:

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

一、名称空间

名称空间分三种:

  1. 内置名称空间
    • Python解释器自带的名字,Python解释器启动就会生成内置名称空间
  2. 全局名称空间
    • 文件级别定义的名字(顶头写,无缩进),都会存放在全局名称空间,执行Python文件时会产生,文件执行完失效
  3. 局部名称空间
    • 定义在函数内部的名字,局部名称空间只有在函数调用时生效,调用完失效

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

取值顺序为:

  1.  从局部开始取值的顺序:局部名称空间-->全局名称空间-->内置名称空间
  2. 从全局开始取值:全局名称空间-->内置名称空间
x=111         #如果局部空间没有值,那就去全局空间取值
def foo():
    #x=55555  #首先从局部空间取值
    print(x)
foo()

max=222
def foo():
    max=333
print(max)     #首先从全局名称空间取值,没有就去内置名称空间取值
foo()

# x=0    #局部名称空间没有,就在全局名称空间找,如果也没有,就去内置名称空间找,没有,就报错NameError: name ‘x‘ is not defined
# def f1():
# # x=1 #下一级再没有,那就从这一级找
# def f2():
# # x=2 #x=3被注释掉,则往上一级,也就是本级查找
# def f3():
# # x=3 #先从本级查找
# print(x)
# f3()
# f2()
# f1()

 作用域

作用范围为:

  1. 全局作用域:全局名称空间和内置名称空间,属于全局范围,在整个文件的任意位置都能被引用,全局有效
  2. 局部作用域:局部名称空间,属于局部范围,只在函数中可以被引用,局部有效

查找顺序是:局部作用域-->全局作用域

函数对象

函数的第一类对象,指的是函数可以被当做数据传递

  • 可以被引用
  • 可以当做函数的参数
  • 可以当做函数的返回值
  • 可以当做容器类型的元素

 

闭包

闭包函数:函数内部定义的函数称为内部函数,该内部函数包含对外部作用域而不是对全局作用域名字的引用,那么该函数称为闭包函数

 

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

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

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

三 名称空间与作用域

python 14 名称空间与作用域

函数的名称空间和作用域

函数的作用域和名称空间