从0.1开始学Python——[15]

本文介绍了Python中的高阶函数,包括filter()函数用于过滤序列,map()函数用于对序列元素进行指定操作,以及.sort()方法进行排序。还探讨了匿名函数(lambda表达式)的使用,它简化了单次使用的函数定义,提高了代码的简洁性。此外,文章展示了如何利用这些函数和方法灵活处理列表和其他可迭代对象,以实现不同的功能需求。
摘要由CSDN通过智能技术生成

一等对象,指的是在运行时创建,能赋值给变量,能作为参数传递也能作为返回值返回的对象。在Python中,所有对象都是一等对象,包括函数。但是函数不是在所有编程语言中都是一等对象。

高阶函数

高阶函数是接收函数作为参数将函数作为返回值的函数。定义一个函数,让它筛选列表的偶数或奇数,并保存到一个新列表里面,或者筛选大于五的数等等。如果就单纯得写判断语句进行判断,这当然可以,而且代码也不多。但是,如果我们希望随时调整功能,那这种方式可能就需要修改多条语句,比较麻烦。但是如果我们在函数内部定义包含了以上功能的多个函数,在需要用到某个的时候在判断语句里面调用相应的函数,那么就能使函数的判断语句最大简化。但是如果我们可以在该函数外部定义一些我们想用的函数,然后希望用哪个就在该函数的参数里面调用,这样则更加方便灵活,只需要增加一个形参输入函数对象,即可实现。

# 定义一个函数用于检查是否为奇数
def jishu(i):
    if i % 2 != 0:
        return True
    return False


# 定义一个函数用于找大于5的数
def dawu(i):
    if i > 5:
        return True
    return False


def duogongneng(fun,list1):

    jieguo = []
    for i in list1:
        # 假如要看是否大于五
        if fun(i):
            jieguo.append(i)

    return jieguo
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(duogongneng(dawu, l))
[6, 7, 8, 9]

这就是典型的高阶函数,属于接收函数作为参数的那一类高阶函数。相当于往函数里面传代码

filter()函数

上述函数实际上是按照某种原则筛选序列里面的元素,然后保存到一个新序列中。而这个功能通过Python内置函数filter(函数对象,序列)函数可以直接实现。输入的两个形参分别是决定过滤功能的函数(其实是可迭代结构)和需要过滤的序列(其实是可迭代结构),返回值是过滤完的可迭代结构,这个结构需要类型转换之后才能成为相应种类的序列。

print(list(filter(dawu, l)))
[6, 7, 8, 9]

匿名函数

上面介绍的filter()函数,输入的函数对象都是需要在程序中定义好的,那其实为了用这个函数而专门定义别的函数其实也挺繁琐,要写不少代码,所以引出了更加方便的匿名函数。基本语法为:lambda 参数:得到返回值的表达式。这个整体相当于一个函数对象,可以赋值给其他变量然后输入实参打印结果,也可以直接输入实参打印出来。匿名函数也被叫做语法糖。例如:

f = (lambda a, b: a+b)
print((lambda a, b: a+b)(11, 23))
print(f(10, 99))
34
109

匿名函数主要解决有些函数只用一次的问题,如果放个地方定义多少有些浪费,所以就可以用匿名函数节省空间,只在用的地方输入一次就行。比如上面使用filter()函数的某个函数功能过滤数列,如果我只想用一次,不妨写成:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
s = filter(lambda i: i % 2 == 0, l)
r = list(s)
print(r)
[2, 4, 6, 8]

当然,因为匿名函数后面只能加一个得到返回值的表达式,因此一些循环语句和复杂的判断语句写不了的。

map()函数

他的作用是对可迭代对象的所有元素做指定的操作,然后将操作完的元素添加到一个新的对象中返回,返回值同样需要类型转换。比如:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
f = map(lambda i: i // 2, l)
print(list(f))
[0, 1, 1, 2, 2, 3, 3, 4, 4]

.sort()方法

之前说到,.sort()方法是用来对列表元素排序的方法,但是他是直接用小于号进行比较,比大小或说Unicode编码大小,所以只能比相同类型的数据。为了解决这个问题,我们可以使用.sort()方法中的另一个用于接收关键字的参数——key,key需要一个函数做参数。设置某函数作为参数之后,运行这个方法的时候,会依次将列表中的元素作为调用这个函数的参数使用,也就是说依次将列表元素代入函数,然后函数用各个元素得到的返回值进行比大小,然后排序。如:

l = [123, 2666, 'maolei', 'zhangchulan', 'kongtiaochengtailang']
l.sort(key=str)
print(l)
[123, 2666, 'kongtiaochengtailang', 'maolei', 'zhangchulan']

sorted()函数和.sort()方法的用法基本一致,但是sorted()函数可以排序任意序列。另外,用sorted()函数处理过序列之后会返回新对象,而不是直接改变原对象的元素顺序,也就是说原对象不受影响

l = [123, 2666, 'maolei', 'zhangchulan', 'kongtiaochengtailang']
l1 = sorted(l, key=str)
print(l1)
print(l)
[123, 2666, 'kongtiaochengtailang', 'maolei', 'zhangchulan']
[123, 2666, 'maolei', 'zhangchulan', 'kongtiaochengtailang']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值