🚀 作者 :“大数据小禅”
🚀 粉丝福利 :加入小禅的大数据社群
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
目录
python函数式编程
lambda表达式的用法及其使用场景
什么是匿名函数?
ambda表达式的基本格式
lambda表达式的使用场景
Python中的高阶函数之map
函数中带两个参数的map函数格式
Python中的高阶函数之reduce
Python中的高阶函数之 filter
Python中的高阶函数之sorted
对序列做升序排序
对序列做降序排序
对存储多个列表的列表做排序
python函数式编程
高级知识点:介绍匿名函数lambda,高阶函数map,reduce,filter,sorted的使用
lambda表达式的用法及其使用场景
什么是匿名函数?
匿名函数,顾名思义就是没有名字的函数,在程序中不用使用def进行定义,可以直接使用lambda关键字编写简单的代码逻辑。lambda本质上是一个函数对象,可以将其赋值给另一个变量,再由该变量来调用函数,也可以直接使用。**
平时,我们是先定义函数,再进行调用:
def power(x): return x ** 2 print(power(2))
power = lambda x : x ** 2 #前面的x表示函数的一个入参,后面的是表示对入参的一个运算 print(power(2)) 输出: 4 觉得太麻烦,还可以这样调用 print((lambda x: 2 * x)(8)) 输出:16
power = lambda x, n: x ** n print(power(2, 3))
def add(l = []): return [x +1 for x in l] print(add([1,2,3])) 输出: 【2,3,4】
def add(func,l = []): return [func(x) for x in l] def add1(x): return x+1 def add2(x): return x+2 print(add(add1,[1,2,3])) print(add(add2,[1,2,3])) 输出: [2, 3, 4] [3, 4, 5] 一个简简单单的问题,一定要用这么多代码实现? def add(func,l = []): return [func(x) for x in l] print(add(lambda x:x+1,[1,2,3])) print(add(lambda x:x+2,[1,2,3]))
Python中的高阶函数之map
*map的基本格式 map(func, iterables)
map()函数接收两个以上的参数,开头一个是函数,剩下的是序列,将传入的函数依次作用到序列
的每个元素,并把结果作为新的序列返回。也就是类似map(func,[1,2,3])
同样的,我们还是来完成这样一个功能:将list每个元素的值加1
def add(x): return x + 1 result = map(add, [1, 2, 3, 4]) #等于是对后面的序列都执行了add的操作 print(type(result)) print(list(result)) #不加这个list进行转化的话会输出:<map object at 0x000002168C98EDC8> 输出: <class 'map'> [2, 3, 4, 5] 使用lambda表达式简化操作 result = map(lambda x: x + 1, [1, 2, 3, 4]) print(type(result)) print(list(result))
print(list(map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6]))) 输出: [5, 7, 9] 对于两个序列元素个数一样的,相对好理解。如果两个序列个数不一样的,会不会报错? print(list(map(lambda x, y: x + y, [1, 2, 3], [4, 5]))) 输出: 【5,7】 我们可以看到不会报错,但是结果以个数少的为准
reduce(function, sequence, initial=None)
reduce把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce函数把结果继续和序列的下一个元素做累积计算,跟递归有点类似,reduce函数会被上一个计算结果应用到本次计算中。
reduce(func, [1,2,3]) = func(func(1, 2), 3) #意思是会先计算1跟2的结果并且运用到下一次的计算中 使用reduce函数,计算一个列表的乘积 from functools import reduce def func(x, y): return x * y print(reduce(func, [1, 2, 3, 4])) #1*2,2*3,6*4 输出: 24 from functools import reduce def func(x, y): return x * y print(reduce(func, [1, 2, 3, 4],2)) #后面的那个2是初始值,不用写initial=2,直接写2就好,计算的结果是48,计算过程,初始值2会先跟1相乘,之后结果2跟2相乘,依次累加 结合lambda表达式,简化操作 from functools import reduce print(reduce(lambda x, y: x * y, [1, 2, 3, 4]))
filter(function_or_None, iterable)
filter()接收一个函数和一个序列。把传入的函数依次作用于每个元素,然后根据返回值是**
True还是False决定保留还是丢弃该元素。
使用filter函数对给定序列进行操作,最后返回序列中所有偶数
print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5]))) 输出: 【2,4】
sorted(iterable, key=None, reverse=False) iterable -- 可迭代对象。 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指 定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
data = [["Python", 99], ["c", 88]] print(sorted(data, key=lambda item: item[1])) #item: item[1])定位到后面那个数字,根据后面那个数字进行排序,不指定的话就是按照第一个数字的大小进行排序。key=lambd这样子就表示把这个大的列表中的小的一个列表,作为item,去传入我们的匿名表达式,item不是关键字,可以更改 #输出: [['c', 88], ['Python', 99]]