分享几个实用的Python高阶函数

什么是高阶函数?

高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。


map()映射函数

在这里插入图片描述

如上图所示,map()函数其实是一个一一映射的关系

使用方法: map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为迭代器返回。

  • 注:map()函数返回的是一个迭代器,需手动将其转换成序列

举个栗子:

代码实现:

func = lambda x: x**2

效果如下:

>>> map(func, [1, 2, 3, 4, 5])
<map object at 0x00000268C7446188>	#函数返回值其实是一个迭代器
>>> list(map(func, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25]	#手动将其转换成列表

再举两个栗子:

>>> list(map(int, "123456789"))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> set(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
{
    
    '5', '8', '3', '7', '6', '4', '1', '2', '9'}

filter()过滤函数

使用方法: filter()接收一个函数函数 和一个序列,这个函数的作用是对序列里的每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新序列的迭代器。

举个栗子:

代码实现:

def func(x):
    /*保留整数序列中的偶数部分*/
    if x % 2 == 0:
        return True
   	else:
        return False

效果如下:

>>> list(filter(func, [x for x in range(1, 11)]))
[2, 4, 6, 8, 10]

再举个栗子

>>> names = ["Joker", "BatMan", "SuperMan", "me"]
>>> list(filter(lambda x:x.islower(), names))
['me']		#卑微的我

reduce()函数

作用: 对参数序列中元素进行累积

使用方法: 将一个序列中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果 。

注:1. 与上面两个函数不同,reduce()返回的是一个值,而不是迭代器对象

​ 2. 在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数

举个栗子:

>>> from functools import reduce
>>> add = lambda x, y:x + y
>>> reduce(add, range(1, 101))
5050

sorted()自定义排序函数

作用: 对所有可迭代的对象进行排序操作

sort 与 sorted 区别:

  1. sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作;

  2. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted 语法:

sorted(iterable, key=None, reverse=False) 

参数说明:

  • iterable – 可迭代对象
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)

返回值:重新排序后的新的列表

举个栗子

题目描述:

  • 随机生成一个包含10个1~100的整数列表,对其中偶数位索引的元素进行升序排序,奇数位索引的元素进行降序排序。
import random
ls = random.sample(range(1, 101), 10)
print(ls)		//排序前:[43, 71, 40, 4, 74, 58, 83, 55, 25, 54]
ls[::2] = sorted(ls[::2])
ls[1::2] = sorted(ls[1::2], reverse = True)
print(ls)		//排序后:[25, 71, 40, 58, 43, 55, 74, 54, 83, 4]

再举个栗子

题目描述:

  • 随机生成一个包含10个-100~100的整数列表,按照绝对值大小从小到大进行排序
import random
ls = random.sample(range(-100, 101), 10)
print(ls)		//排序前:[60, -87, -73, -91, 21, -66, -95, 67, -1, 79]
ls = sorted(ls, key = abs)
print(ls)		//排序后:[-1, 21, 60, -66, 67, -73, 79, -87, -91, -95]


最后,栗子真好吃!真香~~

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45590494/article/details/104364074
今日推荐