本文默认定义:
list为列表仅含有自然数元素.
假设进行针对list的排序,最常用的也是最简单的做法就是调用python内建函数:sort,将辅助函数传递给key参数,返回值进行确认各个元素的所在位置,辅助函数可以判断元素所在群组,返回相应的key.
在简单的输入值之后,得到如下结果:
下面由此函数引入,来看一下闭包的概念:闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability)。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
不同的语言实现闭包的方式不同。Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们多次看到Python使用对象来实现一些特殊的语法)。Python一切皆对象,函数这一语法结构也是一个对象。在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递.
上例子的函数中,help函数访问外层函数的group参数,调用了作用域以外的变量,就是因为它的闭包属性
上述函数中,help作用域中的group属于上一层函数,并不在help的范围内,而却能成功调用,让我们不难理解,闭包其实就是一个带有环境变量的函数.
闭包的基本应用
在日常的开发过程中,闭包的作用可以提高代码复用性,看下面的例子:
在上述代码中,a与b作为外层函数变量被赋值,转而被内层函数加以利用,ab与line构成一个闭包,使得我们每次要得到不同的直线的时候,只需要改变a与b的参数传入值即可,这是函数共同的特性,重复使用,闭包也同样拥有这样的特性,闭包还比一般的函数更加节省定义的空间,让函数定义更为整洁.
总结起来,闭包的使用需要有以下三个条件:闭包函数必须多层函数
内嵌函数需要引用该嵌套函数上一级定义空间中的变量
闭包函数必须返回内嵌函数