拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 【python入门到精通】python函式式编程与应用详解

【python入门到精通】python函式式编程与应用详解

白鹭 - 2022-03-16 2018 0 0

高级知识点:介绍匿名函式lambda,高阶函式map,reduce,filter,sorted的使用

lambda表达式的用法及其使用场景

一般适用于创建一些临时性的,小巧的函式,比如上面的 power函式,我们当然可以使用 def来定义,但使用 lambda 来创建会显得很简洁,尤其是在高阶函式的使用中,

定义一个函式,传入一个list,将list每个元素的值加1

def add(l = []):
 return [x +1 for x in l]
print(add([1,2,3]))

输出:
【2,3,4

上面的函式改成将所有元素的值加2 可能大家会说,这还不简单,直接把return里的1改成2就行了,但是真的行吗?如果函式被多个地方使用,而其他地方并不想加2,怎么办?这好办,把变得那部分抽出来,让呼叫者自己传.

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))

函式中带两个自变量的map函式格式

使用map函式,将两个对应位置求和,之后回传,也就是对[1,2,3],[4,5,6]两个序列进行操作之后,回传结果[5,7,9],

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】
我们可以看到不会报错,但是结果以个数少的为准

Python中的高阶函式之reduce

reduce函式的基本格式
在这里插入图片描述

reduce(function, sequence, initial=None)

filter顾名思义是过滤的意思,带有杂质的(非需要的资料),经过filter处理之后,就被过滤掉,

filter函式的基本格式

filter(function_or_None, iterable)

filter()接收一个函式和一个序列,把传入的函式依次作用于每个元素,然后根据回传值是**
True还是False决定保留还是丢弃该元素,
使用filter函式对给定序列进行操作,最后回传序列中所有偶数

print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])))
输出:
【2,4

Python中的高阶函式之sorted

orted从字面上就可以看去这是个用来拍序的函式,sorted 可以对所有可迭代的物件进行排序操作

sorted的基本格式:

sorted(iterable, key=None, reverse=False)
iterable -- 可迭代物件,
key -- 主要是用来进行比较的元素,只有一个自变量,具体的函式的自变量就是取自于可迭代物件中,指
定可迭代物件中的一个元素来进行排序,
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认),
对序列做升序排序
print(sorted([1, 6, 4, 5, 9]))
对序列做降序排序
print(sorted([1, 6, 4, 5, 9], reverse=True))
对存盘多个串列的串列做排序
data = [["Python", 99], ["c", 88]]

print(sorted(data, key=lambda item: item[1]))   #item: item[1])定位到后面那个数字,根据后面那个数字进行排序,不指定的话就是按照第一个数字的大小进行排序,key=lambd这样子就表示把这个大的串列中的小的一个串列,作为item,去传入我们的匿名表达式,item不是关键字,可以更改

#输出:
[['c', 88], ['Python', 99]]
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *