Python自定义函数使用场景

Python自定义函数使用场景

匿名函数有个限制,就是只能有一个表达式,不用谢return,返回值就是该表达式的结果。
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突,此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。
有下函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量。

匿名函数使用场景

map函数

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数一次作用到每个元素,并把结果作为新的Iterator返回
遍历序列,对序列中的每个元素进行函数操作,最终获取新的序列。

例1

求列表[1,2,3,4,5,6,7,8,9]返回一个n*n的列表

li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))

运行结果:

[1,4,9,16,25,36,49,64,81]

reduce函数

reduce把一个函数作用在一个序列[x1,x2,x3,…]上,一个函数必须接收两个函数,reduce把结果继续和系列的下一个元素做累积计算,其效果就是:

from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x*y,li))
362880

filter 函数

filter()也接收一个函数和一个序列,和map()不同的是,filter()把传入的函数一次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃孩元素
对于序列中的元素进行刷选,最终获取符合条件的序列

# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回数是指从左向右读和从右向左读都是一样的数,例如12321909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

sorted函数

sorted(iterable,/,*,key=None,reverse=False)
接收一个key函数来实现可迭代对象进行自定义的排序,可迭代对象:主要与列表,字符串,元组,集合和字典
key:接受一个函数,根据此函数返回的结果,进行排序
reverse:排序方向,默认从小到大,reverse=True为逆向

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

# 把下面单词以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 输出['Credit', 'Zoo', 'about', 'bad']
"""
对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
"""

# 假设我们用一组tuple表示学生名字和成绩:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
发布了44 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45144837/article/details/104084695
今日推荐