函数嵌套
1.函数的嵌套调用:在函数内又调用了其他函数
def max2(x,y)
if x>y
return x
else:
return y
def max3(x,y,z):
resl=max2(x,y)
res2=max2(res1,z)
return res2
print(max3(11,111,21)
2.函数的嵌套的定义:在函数内又定义其他函数
def func1()
print('from func')
def func2(() func2=内存地址
print('from func2')
print(func2)
func2()
func1()
print(func2)
def f1()
print('f1')
def f2()
print('f2')
def f3()
print('f3')
f3()
f2()
f1()
名称空间:
存放名字与值绑定关系的地方
名称空间分为三类:
1.内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效
2.全局名称空间:文件级别的名字,在执行的时候失效。
def func():
name='egon'
def func
print('====')
3.局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部名称空间)在函数调用时临时生效,在函数结束则失效。
def func(x)
y=2
func(1)
加载顺序:内置名称---》全局名称空间--》局部名称空间
查找名字:局部名称空间--》全局--》内置
作用域
全局作用域:包含的是内置名称空间与全局名称空间的名字
特点:在任何位置都能够访问的到,该范围内的名字会伴随程序整个生命周期
局部作用域:包含的是局部名称空间的名字
特点:只能在函数内使用;调用函数时生效,调用结束时失
函数对象
1.可以被引用
x=1
y=x
def bar():
print('from bar')
f=bar
f=()
2.可以当参数传入
x=1
def func():
print(a)
func(x)
3.可以当函数的返回值
x=1
def foo()
return x
res=foo()
print(res)
4.可以当容器类型的元素
x=1
l=[x]
print(l)
def get():
print('from get')
def put():
print('from put')
l=[get,put]
l[0]()
闭包函数:
闭:定义在函数内部的函数
!!!作用域关系,在函数定义阶段就规定死了,与调用位置无关。
def outter():
x=2
def inner():
x=1
print('from inner',x)
return inner
f=outter
def foo():
x=121212121
f()
foo()
闭包函数:
定义在函数内部的函数,并且该函数包含对外部函数作用域只名字的引用,该函数就称为闭含函数
def outter():
name='egon'
def inner
print('my name is %s'%name)
return inner
f=outter()