函数对象
函数对象的含义是,函数可以被当作数据来处理
函数可以被引用
def add(x, y):
return x + y
func = add
print(func(1, 2)) # 3
函数可以作为容器类型的元素
def add(x, y):
return x + y
fuc_dic = {'1': add}
函数作为参数传递给另一个函数
def add(x, y):
return x + y
def func(x, y, f):
return f(x, y)
print(func(1, 2, add)) # 3
函数的返回值可以是一个函数
def add(x, y):
return x + y
def bar():
return add
func = bar()
print(func(1, 2)) # 3
函数的闭与包
函数作用域的关系是在定义完函数时就已经被确定了的,与函数的调用位置无关。
x = 1
def f1():
def f2():
print(x)
return f2
def f3():
x = 3
f2 = f1() # 调用f1()返回函数f2
f2() # 需要按照函数定义时的作用关系去执行,与调用位置无关
f3() # 结果为1
函数被当做数据处理时,始终以自带的作用域为准。若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)
闭包的用途
有两种给函数传递参数的方式,一种是直接传参,另外一种是将值“包”给内部函数
def f1(x):
return -x
def f2(x):
def inner():
return -x
return inner
res = f2(1)
print(res()) # -1
利用闭包的特点,可以完成装饰器的功能