名称空间与查找顺序

名称空间

"""
name = 'moon'
1.申请内存空间存储moon
2.给moon绑定一个变量名name
3.后续通过变量名name就可以访问到moon
"""
名称空间就是用来存储变量名与数据值绑定关系的地方(我们也可以简单的理解为就是存储变量名的地方)

1.内置名称空间
	解释器运行自动产生	里面包含了很多名字
    	eg:len print input
            
2.全局名称空间
	py文件运行产生 里面存放文件级别的名字
    		name = 'moon'
        
        if name:
            age = 18
            
         while True:
            gender = 'male'
            
         def index():
            pass
        
        class MyClass(object):
            pass
     name\age\gender\index\MyClass
    
3.局部名称空间
	函数体代码运行\类体代码运行 产生的空间

名称空间存活周期及作用范围(域)

存活周期
	内置名称空间
    	python解释器启动则创建 关闭则销毁
   	全局名称空间
    	py文件执行则创建 运行结束则销毁
   	局部名称空间
    	函数体代码运行创建 函数体代码结束则销毁(类暂且不考虑)
作用域
	内置名称空间
    	解释器级别的全局有效
  	全局名称空间
    	py文件级别的全局有效
  	局部名称空间
    	函数体代码内有效

名字的查找顺序

涉及到名字的查找 一定要先搞明白自己在哪个空间
1.当我们在局部名称空间中
	局部名称空间 >>> 全局名称空间 >>> 内置名称空间
2.当我们在全局名称空间中
	全局名称空间 >>> 内置名称空间
ps:其实名字的查找顺序是可以打破的

image

查找顺序案例

1.相互独立的局部名称空间默认不能够互相访问
	def func1():
        name = 'moon'
        print(age)
        
	def func2():
        age = 18
        print(name)
        
        
2.局部名称空间嵌套
	先从自己的局部名称空间查找 之后由内而外依次查找

# 函数体代码中的名字的查找顺序在函数定义阶段就已经固定死了
	x = '睡大觉'
	def func1():
		x = 1
		def func2():
			x = 2
			def func3():
				print(x) #在定义阶段查找顺序就定死了
				x = 3	# 在x变量名被赋值前就已经打印过了所以打不出3
			func3()
		func2()
	func1()

	

作业

2.判断下列money的值是多少并说明理由 思考如何修改而不是新增绑定关系
	money = 100
	def index():
        money = 666	
 	print(money)
    # 100
  

	money = 100
 	def func1():
        money = 666
        def func2():
            money = 888
        func2()
   print(money)
	# 100
posted @ 2022-10-10 20:40  Super小赵  阅读(38)  评论(0编辑  收藏  举报
****************************************** 页脚Html代码 ******************************************