一、返回函数
1、函数作为返回值返回
def lazy_sum(*args):
def sum():
ax=0
for n in args:
ax=ax+n
return ax
return sum
f=lazy_sum(1,3,5)
调用lazy_sum时,返回的是函数
f()
调用函数f,才求和
注:调用lazy_sum时,每次调用都返回一个新的函数(即使传入相同的参数)
只是函数不同,无法==
调用出来的值相同
2、闭包
1、函数内部定义函数
内部函数可引用外部函数的参数和局部变量
返回时,相关参数和变量都保存在返回的函数中
注:返回的函数并没有立即执行,直到调用f()才执行
def count():
fs=[]
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
每次循环都创建一个新函数,然后把创建的新函数都返回了
因为返回的函数引用了i,并非立即执行。等到三个函数都返回时,i已经成了3
2、返回函数不要引用任何循环变量,或者后续会变化的
一定要用循环变量,再创建一个函数,将其参数绑定当前值
def f(j):
def g():
return j*j
return g