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

  

 

posted @ 2021-01-04 10:13  CannedDream  阅读(275)  评论(0编辑  收藏  举报