python匿名函数优点_浅谈python之高阶函数和匿名函数

map()

map()函数接收两个参数,一个是函数,一个是iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的iterator返回。

def func(x):

return x*x

r = map(func, [1, 2, 3, 4, 5])

print(type(r))

r = list(r)

print(r)

输出结果:

[1, 4, 9, 16, 25]

可以看出,map让函数func作用于列表的每一项,使列表的每一项都被函数func执行一次,即列表的每一项都进行平方。其返回值是map类型。

reduce()

reduce函数必须接收两个参数,把一个函数作用在一个序列[x1, x2, x3, ...]上,然后再把结果继续和序列的下一个元素做累积计算。

from functools import reduce

def fn(x, y):

return x * 10 + y

f = reduce(fn, [1, 3, 5, 7, 9]) # 把序列变为整数

print(f)

print(type(f))

输出结果:

13579

和map不同,虽然reduce也是作用于每个元素,但是reduce的作用结果要用在下次和另一个元素做累积计算。

map()和reduce()的结合使用

from functools import reduce

def fn(x, y):

return x * 10 + y

def char2num(s):

digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

return digits[s]

f = reduce(fn, map(char2num, '13579'))

print(f)

输出结果:

13579

可以将字符串类型转换为int类型

filter()

filter()函数用于过滤序列,接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。

def not_empty(s):

return s and s.strip()  # 不能直接写s.strip()

f = filter(not_empty, ['a', '', 'b', none, 'c', ' '])

print(type(f))

print(list(f))

输出结果:

['a', 'b', 'c']

sorted()

sorted()函数也是一个高阶函数,在列表的学习中初步接触了sorted(),但其实它还可以接收一个key函数来实现自定义的排序。

key指定的函数将作用于被排序对象的每一个元素上,并根据key函数返回的结果进行排序。

l = sorted([36, 5, -12, 9, -21], key=abs) # 按绝对值大小排序

print(l)

s = sorted(['bob', 'about', 'zoo', 'credit']) # 按ascii大小排序

print(s)

sl = sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower) # 忽略大小写排序

print(sl)

sr = sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower, reverse=true) # 反向排序

print(sr)

输出结果:

[5, 9, -12, -21, 36]

['credit', 'zoo', 'about', 'bob']

['about', 'bob', 'credit', 'zoo']

['zoo', 'credit', 'bob', 'about']

同样的,sorted()也可以对元组和字典进行排序

from operator import itemgetter    # 需要使用operator模块

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]

print(sorted(l, key=itemgetter(0)))

输出结果:

[('adam', 92), ('bart', 66), ('bob', 75), ('lisa', 88)]

当然,也能以values的值来排序,对字典的排序与元组类似,但返回值不同。

from operator import itemgetter

dic = {"bob": 75, "adam": 92, "lisa": 88}

print(sorted(dic,key=itemgetter(0)))

print(sorted(dic, key=itemgetter(1)))

输出结果:

['adam', 'bob', 'lisa']

['adam', 'lisa', 'bob']

可以看到,不管是以key值进行排序,还是以value值进行排序,排序结果只返回对应顺序的key值。

匿名函数

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

print(f)

输出结果:

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

上面就是一个匿名函数的使用,匿名函数 lambda x: x * x 实际上就是:

def f(x):

return x * x

只是在这里没有显式地定义函数,这样因为函数没有名字,不必担心函数名冲突,而且代码看起来也简洁。

以上所述是小编给大家介绍的python之高阶函数和匿名函数详解整合,希望对大家有所帮助

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值