一、名称空间
1、定义:存放名字与值的绑定关系
2、名称空间分为:内置名称空间、全局名称空间、局部名称空间
内置名称空间:python解释器自带的名字,python解释器启动就会生成
全局名称空间:文件级别定义的名字都会存放与全局名称空间,执行python文件时会产生
局部名称空间:定义在函数内部的名字,局部名称空间只有在调用函数时才会生效,函数调用结束则失效
3、加载的顺序:三者的加载顺序:内置名称空间->全局名称空间->局部名称空间
4、取值的顺序:局部名称空间->全局名称空间->内置名称空间7
# # max=10 # def func(): #x=1 # # max=20 # print(max) # # # func() # max=10 # # def func(): #x=1 # max=20 # # print(max) # func() # # # print(max) # # # x=0 # def f1(): # # x=1 # def f2(): # # x=2 # def f3(): # # x=3 # print(x) # f3() # f2() # # f1()
二、作用域
1、范围:
全局作用域:内置名称空间与全局名称空间的名字属于全局范围,在整个文件的任意位置都能被引用,全局有效
局部作用域:局部名称空间的名字属于局部范围,只在函数内部可以被引用,局部有效
# x=1 # def foo(): # def f2(): # print(x) # f2() # def bar(): # print(x) # # foo() # bar() # def f1(): # x=1 # def f2(): #f2=value # # x=2 # print(x) # f2() # f1() x=1 def func(): x=2 def f1():pass # print(dir(globals()['__builtins__'])) #全局作用域name # print(locals()) #局部作用域name func() print(globals() is locals())
2、作用顺序是:局部作用域》》》》》》全局作用域
三、函数嵌套
1、函数的嵌套定义
def f1(): def f2(): def f3(): print('from f3') print('from f2') f3() print('from f1') f2() # print(f1) f1()
2、函数的嵌套调用
def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1=max2(a,b) #23 res2=max2(res1,c) #23 res3=max2(res2,d) #31 return res3 print(max4(11,23,-7,31))