王亟亟的Python学习之路(八)-函数式编程,map(),reduce(),filter()

简介:

转载请注明出处:王亟亟的大牛之路

首先在这里祝愿大家,新年快乐,工作顺利,BUG少少!!!

本来说是在春节假期内继续维持着写文章的进度,但是还是偷懒了几天(打了4天SC2哈哈哈)

今天上的是关于Python的文章,毕竟在亲戚家拜年,懒得插各类手机调试什么的,况且确实好久没有弄Python了,就写了,废话不多,开始正题!!


函数式编程

函数是什么?

把复杂的操作化为简单的函数分解成简单的操作,这种操作就是面向过程,也就是C这类的实现的大体概念。

函数式是什么?

函数没有变量,任意一个函数,只要输入是确定的,输出就是确定的,以函数作为最基础元件的编程叫做函数式编程(传统的函数式编程里没有变量的,而Python里有)


在Python变量声明时不需要对变量类型定义像这样

a=123

而像java c这些是

int a =123 ;

Python中的变量也可以指向方法(函数,随你怎么叫了理解就行)

这里拿max方法作为例子

print('最大值函数 :', max([1, 2, 3, 100, 20]));

结果:
最大值函数 : 100

返回了最大值100,那么我们把函数指向一个对象试试

maxValue = max;
print('对象指向函数 最大值为:', maxValue(10, 20))

结果:
对象指向函数 最大值为: 20

那既然函数可以指向变量,那么函数也就可以当做参数传入另一个函数了吧?(猜测) 那我们来试试看!

这次拿绝对值函数abs来实验

c = abs

def testABS(a, b, c):
    return c(a) + b

print('测试函数结果:', testABS(-1, -9, c))

结果:
测试函数结果: -8

也就是1-9=-8,符合我们的设想,是可以传入一个函数的


map()

map方法有2个参数,第一个参数为一个函数,第二个参数为一个Iterable(所以你传入(),[]什么的都行了)

每次的结果会单独生成,返回的新的Iterable对象的长度不会减少。

def testMAP(a):
    return a + a

print('返回的结果为:', list(map(testMAP, (1, 2, 3, 4, 5))))

结果:
返回的结果为: [2, 4, 6, 8, 10]

类似的实现,可以用一个循环操作,像这样

istValue = []
for x in [1, 2, 3, 4, 5, ]:
    listValue.append(testMAP(x))
print('返回的结果为:', listValue)

结果和上面的map效果是一样的

再贴个例子int list转字符串list

def toString(a):
    return str(a)


print('转换为字符串:', list(map(toString, [1, 2, 3, 4])))

结果:
转换为字符串: ['1', '2', '3', '4']

原Iterable对象里每个元素不会有任何关系,而reduce()函数恰恰相反


reduce()

reduce也是传入两个参数第一个参数为一个函数,第二个参数为一个Iterable,但是和map的区别在于,他把结果继续和序列的下一个元素做累积计算。

def absAll(a, b):
    return abs(a) + abs(b)


print('返回所有值的绝对值的和', reduce(absAll, (-1, 2, -3, -10, 1)))

结果:
返回所有值的绝对值的和 17

流程就是
1+2=3
3+3=6
6+10=16
16+1=17

那我们把之前的toString操作结合进来(这次让他toInt),计算各总和,像这样

# map reduce组合使用
def toInt(a):
    return int(a)


print('字符串转数字:', toInt("12"))
print('组合拳结果为:', reduce(absAll, list(map(toInt, ["1", "2", "3"]))))

结果:
字符串转数字: 12
组合拳结果为: 6

这样你的程序就可以变得更丰富,更易用。


filter()

filter()函数也需要传入2个参数,第一参数为一个函数,第二个参数为一个序列。filter会遍历每个元素,然后根据第一个参数函数的逻辑判断当前元素True还是False,True就加到新的序列里,False就去掉。

我们看下例子:

def checkValue(a):
    return a - 5 > 0


print('判断是否>5', list(filter(checkValue, [1, 6, 9, 3])))

结果:
判断是否>5 [6, 9]

返回一个新序列,值为符合第一个函数逻辑的值。

源码:https://github.com/ddwhan0123/PythonExample/blob/master/示例/l6Demo.py

目录
相关文章
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
352 1
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
577 154
Python函数式编程-Filter
Python函数式编程-Filter
323 64
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
212 1
|
存储 大数据 Python
案例学Python:filter()函数的用法,高级!
`filter()`函数是Python中处理序列数据的强大工具,它允许我们高效地根据条件过滤元素。通过结合匿名函数、常规函数或直接利用Python的内置逻辑,`filter()`提供了灵活且高效的过滤机制,尤其在大数据处理和内存敏感的应用中展现出其价值。掌握 `filter()`的使用,不仅能提升代码的可读性和效率,还能更好地适应Python的函数式编程风格。
650 2
|
JavaScript 前端开发
js map和reduce
js map和reduce
WK
|
Python
map和filter的区别是什么
`map()`和`filter()`均为Python中的高阶函数,前者针对可迭代对象中的每个元素执行指定操作,如数值翻倍或字符串转大写;后者则筛选出符合条件的元素,例如仅保留偶数或非空字符串。两者均返回迭代器,并可通过`list()`等函数转换为所需的数据结构。具体使用时,应依据实际需求和场景选择合适的函数。
WK
378 1
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。
|
5月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
741 1
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
308 2

热门文章

最新文章

推荐镜像

更多