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

Python中期学者必备之闭包

本文默认定义:

list为列表仅含有自然数元素.

假设进行针对list的排序,最常用的也是最简单的做法就是调用python内建函数:sort,将辅助函数传递给key参数,返回值进行确认各个元素的所在位置,辅助函数可以判断元素所在群组,返回相应的key.

在简单的输入值之后,得到如下结果:

下面由此函数引入,来看一下闭包的概念:

闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability)。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。

不同的语言实现闭包的方式不同。Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们多次看到Python使用对象来实现一些特殊的语法)。Python一切皆对象,函数这一语法结构也是一个对象。在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递.

上例子的函数中,help函数访问外层函数的group参数,调用了作用域以外的变量,就是因为它的闭包属性.

上述函数中,help作用域中的group属于上一层函数,并不在help的范围内,而却能成功调用,让我们不难理解,闭包其实就是一个带有环境变量的函数.

闭包的基本应用

在日常的开发过程中,闭包的作用可以提高代码复用性,看下面的例子:

在上述代码中,a与b作为外层函数变量被赋值,转而被内层函数加以利用,ab与line构成一个闭包,使得我们每次要得到不同的直线的时候,只需要改变a与b的参数传入值即可,这是函数共同的特性,重复使用,闭包也同样拥有这样的特性,闭包还比一般的函数更加节省定义的空间,让函数定义更为整洁.

总结起来,闭包的使用需要有以下三个条件:

闭包函数必须多层函数

内嵌函数需要引用该嵌套函数上一级定义空间中的变量

闭包函数必须返回内嵌函数

关于闭包的使用还需要多练习,闭包对于未来并行计算的实现有着重大的推进作用,有这方面想法的朋友可以多关注.

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券