一、函数的对象
1:可以被引用
def bar():
print('from bar')
f=bar
f() #打印结果 from bar bar() 被f引用
2、可以当做参数传入
x=1
def func(a):
print(a)
func(x)#打印结果为1 func(1)即为func(a)调用即为 print(1)
def bar(): 第4步
print('from bar') 第5步
def wrapper(func): #func=bar 第2步
func() #bar() 第3步
wrapper(bar) 第一步 #打印结果为from bar
3、可以当做函数的返回值
x=1
def foo():
return #即return x 的值,即1
res=foo() 第2步 就是res的值就是调用foo()
print(res) # 第一步就 是打印res 的值
def bar():
print('from bar')
def foo(func): #func=<function bar at 0x00000225AF631E18>
return func #return <function bar at 0x00000225AF631E18>
foo(bar) #f=<function bar at 0x00000225AF631E18>
# foo(bar) 就是把bar 赋值给func, 所以foo(func)就是foo(bar).即return (func)为
return bar 的值, 而bar的值 即为from bar.
4、可以当做容器中类型的元素
def get():
print('from get')
def put():
print('from put')
l=[get,put]
# print(l)
l[0]() #打印结果 为 l[0]为l列表中的第一个元素get,所以l[0]()为get()
即结果为 from get.
其中get() 这个元素为l列表里的元素
二、闭包函数
定义在函数内部的函数, 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数
def outter():
name='egon'
def inner():
print('my name is %s' %name)
return inner
f=outter()
#outter()调用 要用到inner()函数, inner函数在outter()函数的里面, 且影响到外部函数的引用 ,所以 inner()函数即为闭包函数