python——返回函数
返回函数
1. 高阶函数除了能够接收函数作为参数外,还能把函数作为结果返回
2. 例如一个求和函数,通常情况下的定义以及调用:
>>> def sum(*nums):
x=0
for n in nums:
x=x+n
return x
>>> sum(1,2,3,4,5)
15
不返回求和的结果,而是返回求和的函数:
>>> def sum_1(*nums):
def sum_2():
x=0
for n in nums:
x=x+n
return x
return sum_2
>>> s=sum_1(1,2,3,4,5)
>>> s#调用 sum_1时,返回的是求和函数,而不是求和结果
<function sum_1.<locals>.sum_2 at 0x000001D998D0C790>
>>> s()#调用函数s时,返回的是求和结果
15
要注意:当调用 sum_1 时,即使传入相同的参数,每次调用都会返回一个新的函数
>>> s1=sum_1(1,2,3)
>>> s2=sum_1(1,2,3)
>>> s1==s2
False
>>> s1()
6
>>> s2()
6
3. 闭包函数是能够读取其他函数内部变量的函数
例如:
>>> def count(): fs=[] for i in range(1,4): def f(): return i*i fs.append(f) return fs >>> f1,f2,f3 = count() >>> f1() 9 >>> f2() 9 >>> f3()
9
在count函数中,函数 f() 读取了count函数内部的变量 i ,因此可以把函数 f()看作是闭包函数
但是,每次循环,都会创建一个新的函数,创建后不会立即执行,而是等到循环结束后才返回,此时i变成了3,所以结果都是9
要注意:返回函数不要引用任何循环变量,或者后续会发生变化的变量
再创建一个函数:
>>> def count():
def f(j):
def g():
return j*j
return g
fs=[]
for i in range(1,4):
fs.append(f(i))#此时 f(i)立刻被执行
return fs
>>> f1,f2,f3=count()
>>> f1()
1
>>> f2()
4
>>> f3()
9