一、命名空间
(1) 命名空间分为三种:1、全局命名空间
2、局部命名空间
3、 内置命名空间
(2) 三种命名空间的加载和取值顺序:内置命名空间>全局命名空间>局部命名空间
(3)取值:
在局部调用:局部命名空间->全局命名空间->内置命名空间
x = 1 def f(x): print(x) print(10)
在全局调用:全局命名空间->内置命名空间
x = 1 def f(x): print(x) f(10) print(x)
二、作用域
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效
局部作用域:局部名称空间,只能在局部范围内生效
作用域:
小范围的可以用大范围的
但是大范围的不能用小范围的
范围从大到小(图)
在小范围内,如果要用一个变量,是当前这个小范围有的,就用自己的
如果在小范围内没有,就用上一级的,上一级没有就用上上一级的,以此类推。
如果都没有,报错
三、函数嵌套
函数嵌套的调用
def max2(x,y): m = x if x>y else y return m
函数嵌套定义
def f1(): print("in f1") def f2(): print("in f2") f2() f1()
四、函数的作用域链
def f1(): a = 1 def f2(): print(a) f2() f1()
def f1(): a = 1 def f2(): def f3(): print(a) f3() f2() f1()
def f1(): a = 1 def f2(): a = 2 f2() print('a in f1 : ',a) f1()
五、闭包
1、 闭包分为:1、闭:内部函数
2、包:包含对外部函数的作用域中变量的引用
2、闭包常用的形式:
def hei(): x = 20 def inner(): print(x) #局部的 return inner i = hei() i() #全局