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

目录
相关文章
|
2月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
285 82
|
1月前
|
Python
Python高级编程与实战:深入理解函数式编程与元编程
本文深入介绍Python的函数式编程和元编程。函数式编程强调纯函数与不可变数据,涵盖`map`、`filter`、`reduce`及`lambda`的使用;元编程则涉及装饰器、元类和动态属性等内容。通过实战项目如日志记录器和配置管理器,帮助读者掌握这些高级技术,编写更灵活高效的Python程序。
|
2月前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
120 6
|
2月前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
2月前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
36 3
|
4月前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
4月前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
3月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
4月前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
4月前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。