返回函数

函数作为返回值

      -----即函数可作为结果值返回

一般的求和函数:

def calc_sum(*args):
	ax = 0
	for n in args:
		ax = ax + n
	return ax
print calc_sum(1,5,6)
>>>12
若不需要立刻返回求和结果,而是返回求和的函数,则可:

def lazy_sum(*args):
	def sum():
		ax = 0
		for n in args:
			ax = ax + n
		return ax
	return sum
f1 = lazy_sum(1,5,6)
f2 = lazy_sum(1,5,6)
print f1,f1()#f1-->返回求和函数    f1()-->返回求和结果
print lazy_sum(1,5,6),lazy_sum(1,5,6)()#相当于f1,     f1()
print f1 == f2#每次调用lazy_sum()都会返回一个新的函数,即使传入相同的参数,值也不相等,且f1()和f2()的调用结果互不影响
>>> <function sum at 0x7f3e0c7f55f0> 12
>>><function sum at 0x7f3e0c7f56e0> 12
>>>False

闭包:我们在函数lazy_sum()中定义了sum()函数,并且里面的sum()函数可以引用外面的lazy_zum()函数的参数和局部变量,当lazy_sum()返回函数sum()时,相关参数和变量都保存在返回的函数中,这种程序结构称为闭包

def count():
	fs = []
	for i in range(1,4):
		def f():
			return i * i
		fs.append(f)
	return fs
f1, f2, f3 = count()
print f1(),f2(),f3()#结果全为9,因为返回的函数没有立即执行,而是直到调用了f()才执行
>>>9 9 9  

因此,返回闭包时要牢记:返回函数不要引用任何循环变量,或者后续会发生变化的变量,若一定要用循环变量,则可以再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变

def count():
	fs = []
	for i in range(1,4):
		def f(j):
			def g():
				return j * j
			return g
		fs.append(f(i))
	return fs
f1, f2, f3 = count()
print f1(),f2(),f3()#此时输出结果为1 4 9
>>>1 4 9







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值