高阶函数

高阶函数

关于函数,我们先提一下数学的概念:y=f(g(x));先给函数g()给一个参数x,然后将g(x)作为一个参数给函数f(),最终构成的y=f(g(x)),就是一个高阶函数;在数学与计算机科学中,高阶函数应是至少满足下列至少一个条件的函数:

  1. 接受一个或多个函数
  2. 输出一个函数

高阶函数-内建函数

python中常用的内建函数一般有三种:

  1. 排序函数:sorted(iterable[,key][,reverse])

返回一个新的列表,对一个可迭代对象的所有元素排序,排序规则为key定义的函数,reverse表示是否排序翻转
sorted(lst,key=lambda x:6-x) # 返回新列表
list.sort(key=lambda x:6-x) # 就地修改

  1. 过滤数据:fifter(function,iterable) -->fifter object

过滤可迭代对象的元素,返回一个迭代器 function一个具有一个参数的函数,返回bool
例如,过滤出数列中能被3整除的数字:
list(filter(lambda x: x%3=0, [1,9,55,150,-3,78,28,123]))
map(function, iterables) --> map object

3. 映射:map(func,*iterables) -->map object

对多个可迭代对象的元素按照指定的函数进行映射,返回一个迭代器
list(map(lambda x:2*x+1, range(5)))
dict(map(lambda x: (x%5,x) , range(500)))

生成器

生成器generator
生成器指的是生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象
生成器函数

函数体中包含yield语句的函数,返回生成器对象
生成器对象,是一个可迭代对象,是一个迭代器
生成器对象 ,是延迟计算,惰性求值的

举例:

def inc():
       for i in range(5):
	yield i
print(type(inc)) #输出为一个地址                      
print(type(inc())) 
x = inc()
print(type(x)) #输出的就是一个迭代器
print(next(x)) #输出的为一个具体的值
for m in x:
       print(m, '*') 
for m in x:
       print(m, '**)

普通的函数调用fn(),函数会立即执行完毕,但是生成器函数可以使用next函数多次执行
生成器函数等价于生成器表达式,只不过是生成器函数可以更加的复杂
生成器函数:
包含yield语句的生成器函数生成生成器对象的时候,生成器函数的函数体不会立即执行
next(generator)会从函数的当前位置向后执行到之后碰到的第一个yield语句,会弹出值,并暂停函数执行
再次调用next函数,和上一条一样的处理过程
没有多余的yield语句能被执行,继续调用next函数,会抛出StopIteration异常

map函数

map函数需要给两个参数,ps:其中的一个参数要是函数f( ),另外一个是一个可迭代对象iter,函数执行的时候,迭代对象iter中的每一个元素都会做为函数f( )的参数,最终会生成一个新的列表。
计算:f(x)=x**2
代码实现如下:

    #!/usr/bin/python3
    def y(x):
    	return x**2
    l = list(map(y,[1,2,3,4,5,6,7,8,]))
    print(l)
    输出结果为:[1,4,9,16,25,36,49,64]
reduce函数

reduce的作用是把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce会把这个函数的结果继续和序列的下一个元素做累积计算,最终返回一个值;
计算1~9的累积和;
代码实现如下:

    from functools import reduce
    def f(num,a):
    	return num+a
    	n = reduce(f,[1,2,3,4,5,6,7,8,9])
    	print(n)	
输出结果为:45
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值