python-高阶函数

##高阶函数定义
函数本身也可以赋值给变量,即变量可以指向函数

f=max
print f(3,4)

这里写图片描述
既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。函数名其实就是指向函数的变量

f=abs #变量f指向函数ads
def add(x,y,f):  #f即函数ads作为add函数的参数
    return f(x) + f(y) 

print add(-5,-7,f)

计算过程
x ==> -5
y ==> -7
f ==> abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 12
这里写图片描述

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

def f(x):
    return x*x

li = range(1,11)
print map(f,li)
print isinstance(map(f,li),list)

这里写图片描述

reduce函数
reduce 把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接
收两个参数,reduce 把结果继续和序列的下一个元素做累积计算。
reduce函数函数至少需要两个参数,第一个参数是函数名<注意,函数名必须传递两个参数>
第二个参数是序列(str,list,tuple)reduce的功能:把序列中的前两个元素作为参数(add(1,2)),传递给函数进行运行

#节乘
def add(x,y):
    return x*y

print reduce(add,range(1,4))

filter函数

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

把一个序列中的空字符串删
li=[1,2,3,4,'','6']

def kong(x):
    return x

print filter(kong,li),len(filter(kong,li))

这里写图片描述
sorted函数
• 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
排序,排序的核心是比较两个元素的大小。通常规定如下:
x < y, return -1
x == y, return 0
x > y, return 1

#可以对列表进行排序
import random

li = random.sample([i for i in range(10)],6)
print li
print sorted(li)


#倒叙排序
def reversed_cmp(x,y):
    if x>y:
        return -1
    if x<y:
        return 1
    return 0
print sorted(li,reversed_cmp)

这里写图片描述
这里写图片描述
匿名函数
lambda适用于定义小型函数,在函数中仅能包含单一的参数表达式,而不能包含其他语句
•当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
•关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数

print map(lambda x: x*x,[1,2,3,4])
#冒号左边是输入的参数,右边是返回出来值

• 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。
• 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对
象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;

f=lambda x: x*x #将匿名函数函数付给变量,通过调用变量来调用函数

print f
print f(4)

这里写图片描述

也可以把匿名函数作为返回值返回

def build(x,y):return lambda: x*x+y*y #将匿名函数作为返回值

print build(1,2)

a=build(1,2)
print a()

不能在lambda中使用print

fun = lambda x: print x

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值