王亟亟的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

目录
相关文章
WK
|
28天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
70 36
|
2月前
|
索引
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
|
1月前
|
存储 算法 数据处理
Python函数式编程
【10月更文挑战第12天】函数式编程是一种强大的编程范式,它可以帮助我们编写更加简洁、易读、可维护和高效的代码。虽然 Python 不是一种纯粹的函数式编程语言,但它提供了许多支持函数式编程的特性和功能。通过深入了解和掌握函数式编程的概念和技巧,我们可以在 Python 编程中更好地应用函数式编程的理念,提高我们的编程水平和代码质量。
15 2
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
38 1
|
1月前
|
存储 大数据 Python
案例学Python:filter()函数的用法,高级!
`filter()`函数是Python中处理序列数据的强大工具,它允许我们高效地根据条件过滤元素。通过结合匿名函数、常规函数或直接利用Python的内置逻辑,`filter()`提供了灵活且高效的过滤机制,尤其在大数据处理和内存敏感的应用中展现出其价值。掌握 `filter()`的使用,不仅能提升代码的可读性和效率,还能更好地适应Python的函数式编程风格。
35 2
|
2月前
|
Python
Python函数式编程-Filter
Python函数式编程-Filter
WK
|
2月前
|
Python
map和filter的区别是什么
`map()`和`filter()`均为Python中的高阶函数,前者针对可迭代对象中的每个元素执行指定操作,如数值翻倍或字符串转大写;后者则筛选出符合条件的元素,例如仅保留偶数或非空字符串。两者均返回迭代器,并可通过`list()`等函数转换为所需的数据结构。具体使用时,应依据实际需求和场景选择合适的函数。
WK
21 1
WK
|
2月前
map和filter的区别是什么
在编程中,`map` 和 `filter` 是处理数组或集合时常用的两个函数。`map` 用于将每个元素通过指定函数转换后生成新的数组,而 `filter` 则根据条件筛选出符合条件的元素组成新数组。两者的主要区别在于:`map` 的返回数组长度与原数组相同,但元素被转换;`filter` 的返回数组长度可能不同,只包含符合条件的元素。
WK
31 2
|
2月前
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。
|
3月前
|
JavaScript 前端开发 索引
JS中常用的数组迭代方法(filter,forEach,map,every,some,find,findIndex)
这段代码和说明介绍了JavaScript中数组的一些常用方法。函数接收三个参数:`item`(数组项的值)、`index`(项的位置,可选)和`array`(数组本身,可选)。示例展示了如何使用`filter()`过滤非空项、`forEach()`遍历数组、`map()`处理并返回新数组、`every()`检查所有元素是否满足条件、`some()`检查是否存在满足条件的元素、`find()`获取首个符合条件的元素值以及`findIndex()`获取其索引位置。这些方法都不会修改原数组。
JS中常用的数组迭代方法(filter,forEach,map,every,some,find,findIndex)
下一篇
无影云桌面