【Python学习】10.高阶函数及用法(map、reduce、filter、sorted)

本文介绍了Python中的高阶函数,包括map()、reduce()、filter()和sorted()的用法,并通过实例和练习展示了它们的功能。map()用于将函数应用于可迭代对象的每个元素,reduce()则进行累积计算,filter()则根据函数返回值筛选元素。此外,文章还提供了将字符串转换为整数、求和、求积、筛选素数、转换浮点数等实际应用,并给出了多个练习题供读者实践。
摘要由CSDN通过智能技术生成

本节摘要:高阶函数的基本介绍,map( )函数、reduce( )函数、filter( )函数、sorted( )函数的介绍



高阶函数

Higher-order function,即高阶函数。

  • 变量可以指向函数

例如,Python内置的求绝对值的函数abs():

>>> abs(-5)                 # 调用该函数用此代码,abs(-5)是函数调用
5
>>> abs                        # 只写abs,abs是函数本身
<built-in function abs>
>>> x = abs(-5)          # 要获得函数调用结果,可以把结果赋值给变量,x变量指向函数abs()
>>> x
5
>>> x = abs               # 把函数本身赋值给变量
>>> x
<built-in function abs>

结论:函数本身也可以赋值给变量,即:变量可以指向函数。

如果一个变量指向了一个函数,则可通过调用该变量来调用这个函数:

>>> f = abs                  # 变量f现在已经指向了abs函数本身
>>> f(-8)                      # 直接调用abs()函数和调用变量f()完全相同
8
  • 函数名也是变量

函数名也是变量,函数名其实就是指向函数的变量,对于abs()这个函数,完全可以把函数名abs看成变量,它指向一个可以计算绝对值的函数

如果把abs指向其他对象

>>> abs = 10
>>> abs
10
>>> abs(-10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

abs指向10后,就无法通过abs(-10)调用该函数了!因为abs这个变量已经不指向求绝对值函数而是指向一个整数10

要恢复abs函数,请exit()退出后重启Python交互环境。

注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10

  • 传入函数

既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,函数就可以传入函数和返回函数,这种函数就叫高阶函数。

简单高阶函数例如:

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

当调用add(2, -5, abs)时,参数x,y和f分别接收2,-5和abs,根据函数定义,可以推导计算过程为:

x = 2
y = -5
f = abs
f(x) + f(y) ==> abs(2) + abs(-5) ==> 7
return 7

代码验证:

>>> def add(x, y, f):
...     return f(x) + f(y)
...
>>> print add(2, -5, abs)
7

编写高阶函数,就是让函数的参数能够接收别的函数。

  • 总结
    把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

map( )函数

map( ) 是一种高阶函数,它接收两个参数,第一个是函数,第二个是Iterable,即可迭代对象。map( )将函数依次作用于Iterable的每个元素,并将结果以Iterator,即迭代器的形式返回。这种方式类似构造出了数学中的映射过程。

例如,函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2,把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值