名称空间与作用域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了名称空间与作用域相关的知识,希望对你有一定的参考价值。
一、名称空间
名称空间分三种:
- 内置名称空间
- Python解释器自带的名字,Python解释器启动就会生成内置名称空间
- 全局名称空间
- 文件级别定义的名字(顶头写,无缩进),都会存放在全局名称空间,执行Python文件时会产生,文件执行完失效
- 局部名称空间
- 定义在函数内部的名字,局部名称空间只有在函数调用时生效,调用完失效
三者的加载的顺序:内置名称空间-->全局名称空间-->局部名称空间
取值顺序为:
- 从局部开始取值的顺序:局部名称空间-->全局名称空间-->内置名称空间
- 从全局开始取值:全局名称空间-->内置名称空间
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()
作用域
作用范围为:
- 全局作用域:全局名称空间和内置名称空间,属于全局范围,在整个文件的任意位置都能被引用,全局有效
- 局部作用域:局部名称空间,属于局部范围,只在函数中可以被引用,局部有效
查找顺序是:局部作用域-->全局作用域
函数对象
函数的第一类对象,指的是函数可以被当做数据传递
- 可以被引用
- 可以当做函数的参数
- 可以当做函数的返回值
- 可以当做容器类型的元素
闭包
闭包函数:函数内部定义的函数称为内部函数,该内部函数包含对外部作用域而不是对全局作用域名字的引用,那么该函数称为闭包函数
以上是关于名称空间与作用域的主要内容,如果未能解决你的问题,请参考以下文章