Python|高阶函数

栏目: Python · 发布时间: 6年前

内容简介:Python|高阶函数

01

函数名也是变量!

abs(-100)

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

因此,函数名其实就是指向函数的变量,也就是说,变量可以指向函数。

f = abs
f(-10)

10

02

高阶函数

既然变量f可以指向函数,并且函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

def minus(x, y, f):
return f(x) - f(y)

minus就是高阶函数,因为其参数f,指向了函数。

当我们调用 minus(-10,4,abs)时,根据函数定义,可以推导计算过程如下:

x = -10
y = 4
f = abs
f(x) + f(y) ==> abs(-10) - abs(4) ==> 6
return 6

03

Map

map() 传入的第一个参数是 f

map将f依次作用到序列的每个元素,并把结果作为新的Iterator返回。

def f(x):
    return x * x

如果不用map,需要这么写:
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
    L.append(f(n))

用map一行代码搞定:
list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

另外一个map例子:
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
结果:
['1', '2', '3', '4', '5', '6', '7', '8', '9']

再看一个map例子:
def char2num(s):
    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return digits[s]

print(list(map(char2num,"13579"))) #注意“13579”是个序列
结果:
[1, 3, 5, 7, 9]

04

Reduce

reduce把f作用在一个序列[x1, x2, x3, ...]上,f必须接收两个参数


reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)


from functools import reduce

#reduce的参数f函数,f必须接受两个参数

def fn(x, y):
    return x * 10 + y

reduce(fn, [2, 4, 6, 7, 9])


结果:

24679

05

结合Map

和Reduce

def str2num(s):
    return reduce(fn, map(char2num, s))


print(str2num('213579'))

结果:

213579

解释:map作用将序列s中每一个字符转化为num,返回一个Iterator对象,reduce的参数fn将这个Iterator对象转化为对应的整数表示。

Map完成了数据拆分,Reduce化简合并数据。

Python|高阶函数

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:基本算法,机器学习,深度学习,Kaggle实战,Spark和Tensorflow等。期待您的到来!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Boolean Reasoning

Boolean Reasoning

Brown, Frank Markham / 2003-4 / $ 19.15

A systematic treatment of Boolean reasoning, this concise, newly revised edition combines the works of early logicians with recent investigations, including previously unpublished research results. Th......一起来看看 《Boolean Reasoning》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具