第十三天 函数(高阶和匿名)

1、map()函数
map函数时python内置的一个高阶函数,它接受一个函数f和一个list,并把list的元素以此传递给函数f,然后返回一个函数f处理完所有list元素的列表。

#map()函数,第一个参数为自定义函数,第二个参数为一个可迭代对象
lt = (1, 2, 3, 4, 5)
def f2(x):
    return (x*x)
m1 = map(f2, lt)
print(type(m1))
print(m1)

这里写图片描述

2、reduce()函数
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,第一次调用是把list的前两个元素传递给f,第二次调用时,就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,传入f进行操作,以后以以此类推,并返回最终结果值。

#reduece函数
#传入函数必须接受两个参数,
#把可迭代对象的前两个参数作为函数的实参,传入到f函数中
#把每次f运算的结果作为第一个实参,可迭代对象的下一个元素作为另一个实参
#以此类推,最终得到结果
print('################reduce###############')
def f(x, y):
    return (x+y)
print(reduce(f, [1, 2, 3, 4, 5], 10))

运算过程:
1, 计算a = f(1,2)的值为3
2, 计算b = f(a, 3)的值为6
3, 计算c = f(b, 4)的值为10
4, 计算d = f(c, 5)的值为15
5, 计算f(d, 10)的值为25
其实就是相当于1+2+3+4+5+10,最有的10是一个默认值,及最终在执行一次。

这里写图片描述

3、filter()函数
filter英文单词就是过滤的意思,filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

#filter函数
#每次把可迭代对象的元素传入进去,如果返回为‘TRUE’,则保留该元素,如果反悔了‘Flase’,则不保留该元素
print('################filter###############')
a = [1, 2, 3, 4, 5]
def is_odd(x):
    return(x%2 == 1)
print (is_odd(5))
print(filter(is_odd, a))

解释:
1, list的元素以此传入到函数is_odd,
2, is_odd判断每个元素是否符合条件,把符合条件的留下,不符合条件的舍弃
3, 把最终所有符合条件的元素组成一个新的列表

这里写图片描述

4、匿名函数

顾名思义就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?
lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
常规版本:

def fun(x,y)
return x*y

lambda版本:
r = lambda x,y:x*y
print(r(2,3))
print(type(r))

结果:
6

#匿名函数
def sum(x,y):
    return x+y
m = lambda x, y: x + y#后面是返回的结果
print(m)
print(m(4, 5))

这里写图片描述

5、sorted函数
sorted(…)
sorted(iterable, cmp=None, key=None, reverse=False) –> new sorted list
对字典进行排序:
按照value进行排序
mm = dict(a=1,b=10,c=3,d=9)
print sorted(mm.iteritems(), key = lambda d:d[1], reverse = True)

作用:返回一个经过排序的列表。
第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
key参数的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。对复杂对象的比较通常是使用对象的切片作为关键字。

#sorted()#高阶函数
#字典进行排序
mm = dict(a=1, c=20, d=9, b=10)
for i in mm:
    print i
print('$$$$$$$$$$$$$$$$')
for key, value in mm.iteritems():#这里是基于values的排序所需
    print(key, value)
# print(dir(mm))
print(mm)
help(sorted) #查看帮助
test = sorted(mm)#这是基于key的排序
# test = sorted(mm.iteritems(), key=lambda d: d[1])
print(test)

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值