返回函数
简单的说就是返回值是一个函数
返回的是函数,调用返回的函数的时候才会返回结果
def returnsum(a,b):
def sum():
return a+b
return sum # 这里将sum函数返回
test = returnsum(1,2)
print(test)
print(test())
<function returnsum.<locals>.sum at 0x0000000004EE6048>
3
每次调用都会返回一个新的函数,即使传入相同的参数
def returnsum(a,b):
def sum():
return a+b
return sum
test01 = returnsum(1,2)
test02 = returnsum(1,2)
print(test01 == test02) # 每次调用都会返回新生成的函数
False
闭包(Closure)
相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”,比如上面例子的sum
函数闭包的特性,嵌套定义在非全局作用域里面的函数能够记住它在被定义的时候它所处的封闭命名空间
def closuretest(a):
def myprint():
print(a)
return myprint
test = closuretest(1)
test()
1
上面的代码中,变量a是函数closuretest的一个本地变量,只应该存在于函数运行期间,但正因为闭包的特性,将a的值封装进了返回函数
def closuretest02(*args):
f = []
for i in args:
def test():
return i**2
f.append(test)
return f
test = closuretest02(1,2,