名称空间与作用域

Posted lujiachengdelu

tags:

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

一 名称空间相关

1.名称空间Namespace:指的就是存放名字与值内存地址绑定关系的地方(内存空间)

x= 1

2.名称空间分为三大类

内置名称空间:存放的是python解释器自带的名字

产生:python解释器的启动则产生

销毁:python解释器关闭则销毁

 

全局名称空间:在顶级定义的名字

x=1

if True:

y=2

while True:

  while True:

     while  True:

                z=3

def func():

pass

 

产生:执行python程序时产生

销毁:python程序执行完毕后则销毁

局部名称空间:在函数内定义的名字

def foo():

m=100

foo()

产生:在函数调用时临时产生

销毁:在函数调用完毕后则销毁

 

三种名称空间的产生的先后顺序:内置>全局>局部

查找名字的顺序:从当前位置往外一层一层查找

如果当前在局部名称空间:局部->全局->内置

如果当前在全局名称空间:全局->内置

# # len=111
# # def foo():
# # # len=222
# # print(len)
# # len=111
# # foo()
#
#
# x=0
# def f1():
# x=1
# def f2():
# x=2
# def f3():
# x=3
# print(x)
# f3()
# f2()
# f1()
# #
#
# def foo1():
# def foo2():
# def foo3():
# print(x)

二.作用域:指的是作用范围

全局作用域:包含内置与全局名称空间的名字

特点:全局存活,全局有效

局部作用域:包含局部名称空间的名字

特点:临时存活,局部有效

全局作用域:包含的是内置名称空间与全局名称空间的名字

特点

1.在任何位置都能访问的到

2.该范围内地名字会伴随程序整个生命周期

局部作用域:包含的是局部名称空间的名字

特点:

1.只能在函数内使用

2.调用函数时生效,调用结束失效

!!!!!!重点:作用域关系是在函数定义阶段就已经固定死了.与调用位置无关

# 示范一:/
def f1():
print(xxx)
xxx=111

def f2():
xxx=222
f1()

f2()
#
# 示范二:
# xxx=111
# yyy=333
# def f1():
# xxx=222
# print(xxx)
# # xxx=222
# yyy=222
# print(yyy)
#
# f1()

 














































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

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

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

三 名称空间与作用域

python 14 名称空间与作用域

函数的名称空间和作用域

函数的作用域和名称空间