首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python之返回函数

我们都知道程序的编写基本方法是IPO。由几个函数构成。函数的编写方法也是IPO。

I:input 输入

P:process 处理

O:output 输出

比如说一个求和函数,输入几个元素,经过函数处理运算,输出这几个元素的和。

一个复杂的程序经过拆分变成几个模块,这些模块再由几个函数来完成。像这样的分解写法是我们必须要掌握的。

python是一种面向对象的语言

在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

返回函数

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

现在实现一个可变参数的求和。

注意「*a」这个参数的意思是可变参数,就是不知道参数有几个,例如上面的例子,参数是四个。

但是如果我们不立即求和,而是在后面的代码中需要的时候在求和怎么办?

也就是说不返回求和的结果,而是返回求和的函数:

当我们调用lazy_sum()时,返回的并不是求和的结果,而是一个求和函数sum()

.sum at 0x0382BC48>

调用函数 f() 时,才返回求和结果

在这个例子里,我们在函数lazy_num中又定义了函数sum,并且内部函数sum可以引用外部函数的参数和局部变量,当lazy_num返回函数sum,相关参数和局部变量都保存在返回函数中,这种称为「闭包」(closure)的程序结构具有极大的威力,很牛逼就是了

还要注意一点,当我们调用lazy_num()函数时,每次调用都会返回一个新的函数,即使传入相同的参数:

f1()和f2()的调用结果不受影响

闭包

注意到返回函数在内部引用了局部变量a,所以,当一个函数返回了一个函数后,其内部的局部变量还可以被新函数引用,所以闭包用起来简单,可实现起来并不简单

另一个要注意的问题是,返回的函数并没有立刻执行,而是直到调用的时候才执行

总结

一个函数可以返回一个计算结果,也可以返回一个函数。

返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180719G1J91700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券