在python中可以在函数中定义函数。
一般情况下,为了方便可以写一些简单的类似内联函数一样,放在函数里面,然后在函数里面进行大量重复调用。
如:
def foo():
def bar():
print("hello,world !")
bar()
真正可怕的应用是函数闭包的实现。如下所示
# 函数闭包的实现
def multiplier(factor):
def multiplyByFactor(number):
return number * factor
return multiplyByFactor #本质上返回的是函数引用,函数指针
double = multiplier(2)
print(double(5))
triple = multiplier(3)
print(triple(9))
print(multiplier(4)(5)) # 这里有点像链式调用了
解释一下这里面的神奇之处: 一个函数为与另一个函数里面,外层的函数返回里层的函数(函数指针),但是这个函数没有立即被调用。重要的是返回的函数还可以访问它的定义所在的作用域,以及这个作用域中的变量,换句话说:
“它带着它的环境和相关的局部变量。”