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

时间: 2024-10-17 03:14:49

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

Python学习之路:函数式编程介绍&高阶函数

函数式编程:一种抽象程度很高的范式,重要特点:输入是确定的,输出就是确定的: Python对函数式编程,部分支持: 高阶函数: def add(x,y,f):#函数本身传给函数,就是高阶函数 return f(x)+f(y) res = add(3,-6,abs) print(res)

Python函数式编程 map reduce filter

函数式编程,使代码简洁高效. Map函数: map(func, *iterables),作用是将一个列表映射到另一个列表. class map(object): """ map(func, *iterables) --> map object Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest ite

Python学习总结之五 -- 入门函数式编程

函数式编程 最近对Python的学习有些怠慢,最近的学习态度和学习效率确实很不好,目前这种病况正在好转. 今天,我把之前学过的Python中函数式编程简单总结一下,分享给大家,也欢迎并感谢大家提出意见. 首先,我们学习函数式编程时,需要知道一个概念:高阶函数.那么到底什么是高阶函数呢?把函数作为参数传入,这样的函数就称为高阶函数.而函数式编程就是指这种高度抽象的编程范式. 正文 接下来,我简单介绍以下四种函数的用法:map/reduce   filter   sorted   lambda 在这

python学习09-函数和函数式编程

函数和函数式编程 函数会向调用者返回一个值, 而实际编程中大偏函数更接近过程,不显示地返回任何东西.把过程看待成函数的语言通常对于"什么都不返回"的函数设定了特殊的类型或者值的名字.这些函数在 c 中默认为"void"的返回类型,意思是没有值返回. 在 python 中, 对应的返回对象类型是none. 简而言之,当没有显式地返回元素或者如果返回 None 时, python 会返回一个 None.那么调用者接收的就是 python 返回的那个对象,且对象的类型仍然

python学习第十一天 -- 函数式编程

在介绍函数式编程之前,先介绍几个概念性的东西. 什么是函数式编程? 函数式编程的特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,没有副作用,测试简单; 3.支持高阶函数,代码简洁. 什么是高阶函数? 能接收函数做参数的函数,称为高阶函数. 高阶函数的特点: 1.变量可以指向函数 2.函数的参数可以接收变量 3.一个函数可以接收另一个函数作为参数 Python支持的函数式编程? 1.不是纯函数式编程:允许有变量 2.支持高阶函数:函数也可以作为变量传入 3.支持闭包:有了闭包就

Python学习笔记__4.1.1章 map/reduce

# 这是学习廖雪峰老师python教程的学习笔记 1.map函数 map() 函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回 # 比如有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上 >>> def f(x): ...     return x * x list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])

【Python学习之旅】---函数式编程(函数尾调用、map函数、filter函数、reduce函数)

执行结果: 执行结果: 执行结果: 执行结果: 原文地址:https://www.cnblogs.com/chenyuxia/p/11980040.html

Python函数式编程-map/reduce

1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. >>> def f(x): ... return x*x ... >>> r=map(f,[1,2,3,4,5]) >>> list (r) [1, 4, 9, 16, 25] 2.reduce reduce把一个函数作用在一个序列[x1, x

Python学习之路-Day1-Python基础

Python学习之路第一天 学习内容: 1.Python简介 2.安装 3.第一个Python程序 4.变量 5.字符编码 6.用户输入 7.表达式if..else语句 8.表达式for语句 9.break和continue 10.while循环 11.字符串格式化 1.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOB

Python学习之路

Python学习之路 目录 Python学习之路[第一篇]:流程控制,用户交互,语法要求,变量,字符,注释,模块导入的使用 Python学习之路[第二篇]:文件,字符串,列表,元组,字典,集合的使用 更新中...