函数式编程

变量可以指向函数

#函数的调用
>>> abs(-5)
5

#直接写abs则返回函数对象
>>> abs
<built-in function abs>

#定义一个变量f,把它指向abs,对f调用相当于对abs调用
#说明变量可以指向函数
>>> f = abs
>>> f(-8)
8

函数名其实就是指向函数的变量

#这里把abs指向另一个函数,则abs不再是求绝对值的函数了
>>> abs = len
>>> abs(-5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
#可以得到字符串的长度
>>> abs('hehe')
4
#以上说明了函数名和普通的变量没有区别,它指向的只是一个函数对象

高阶函数:能接收函数做参数的函数

  • 变量可以指向函数
  • 函数的参数可以接收变量
  • 一个函数可以接收另一个函数作为参数
  • 能接收函数作参数的函数就是高阶函数

来看一个高阶函数的例子

>>> def add(x, y, f):     #定义一个add函数
...     return f(x) + f(y)
...
>>> add(-7, 9, abs)      #对函数进行调用
16

任务利用add(x,y,f)函数,计算:

#答案
import math

def add(x, y, f):
    return f(x) + f(y)

print add(25, 9, math.sqrt)

map()函数

python中reduce()函数

python中的filter函数

python中自定义排序函数

python中返回函数

python中闭包

  • 像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。
  • 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

python中匿名函数

  • 高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。
  • 匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。
  • 使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码

Python中装饰器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容