Python中的内置高阶函数

1.高阶函数

  • 实参是一个函数
  • 函数的返回值是一个函数

2.map() 映射函数

map函数一次性接收两个参数,一个函数,一个为序列;作用是将接收的函数作用到所接收序列中的每一个元素

# 对一个序列[-1,3,-4,-5]的每一个元素求绝对值
import random
print(list(map(abs,[-1,3,-4,-5])))

# 对每个元素求阶乘
def f(x):
    """对x求阶乘"""
    res = 1
    for i in range(1,x+1):
        res = res * i
    return res

li = [random.randint(2,7) for i in range(10)]
print(li)

print(list(map(f,li)))

3. reduce() 迭代函数

reduce()同样是接收两个参数,一个为函数,一个为序列;作用是把这个函数作用在序列上;
但函数每次从序列上接收两个元素,进行操作并将结果再返回给序列,这样依次迭代累积计算,最终得到一个结果

需要注意的是:reduce() 在python2中是内置函数,可以直接使用;但在python3中,需要导入相应模块才能使用
from funtools import reduce

"""
reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算

reduce(f,[x1,x2,x3,x4]) = f(f(x1,x2),x3),x4)

python2中:reduce是内置函数
python3:from functools import reduce
"""
from functools import reduce

def multi(x,y):
    return x*y
print(reduce(multi,range(1,10)))

def add(x,y):
    return  x+y
print(reduce(add,range(1,101)))

4. lambda 匿名函数

简单的函数定义可以省去格式上的繁琐,定义为匿名函数;
函数中冒号之前的为形参,冒号之后的为返回值

from functools import reduce

def add(x,y):
    return x+y

print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))

# def mypow(x):
#     return x **2
print(list(map(lambda x:x**2,range(5))))

# def isood(num):
#     return num%2 ==0
# print(isood(11))

print(list(filter(lambda x:x%2==0,range(100))))

5. filter()过滤函数

与map() 函数类似;filter() 接收函数和序列两个参数,将函数作用于序列中的每个元素,但返回值为bool值,True或者False;
根据其返回值决定保留还是舍弃该元素
,从而达到过滤的效果

def isodd(num):
    if num % 2 ==0:
        return True
    else:
        return False
print(list(filter(isodd,range(100)))) 

6.练习

例:将一个字符串转换成整型’1234’–>1234

from functools import reduce
def str2int(s):
    def char2int(ch):
        c = {str(x):x for x in range(10)}
        #print(c)
        return c[ch]
    def fun(n1,n2):
        return n1 * 10 + n2
    return reduce(fun,map(char2int,s))

num = str2int('12343')
print(type(num),num)

例2:有一个整数列表(10个元素),要求调整元素的顺序
把奇数放在前面 偶数放在后面

import random
li=[random.randint(1,50)for i in range(15)]
print(li)
l=sorted(li,key=lambda x:3 if x%2==0 else 2)
print(l)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值