python之高阶函数

什么是高阶函数

1.函数接受的一个参数是一个函数名
2.函数的返回值是一个函数名
3.满足上述条件任意一个,都可以称为高阶函数

函数接受的一个参数是一个函数名

输入

def fun(a,b):
    return a+b

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

print(abs(-11))

f = abs
# 函数本身也可以赋值给变量,变量可以指向函数
print(f(-10))

输出

3
11
10

abs() 函数:返回数字的绝对值

函数的返回值是一个函数名

#传递的参数包括函数名
输入

def fun(x,y,f):
    return f(x),f(y)

print(fun(-10,24,abs))

输出

(10, 24)

内置高阶函数map()

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

输入

import random
# 序列[-1,2,-3,4]的每个元素求绝对值

print(list(map(abs,[-1,2,-3,4])))

# 对于序列的每个元素求阶乘(10个2-9之间的随机数)

def f(x):
    res = 1
    for i in range(1,x+1):
        res *= i
    return res

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

print(list(map(f,li)))
#转化为整型并以列表形式输出
s = '1 3 5 7 9'
# print(s.split())
print(list(map(int,s.split())))

输出

[1, 2, 3, 4]
[9, 5, 4, 2, 7, 5, 6, 8, 6, 7]
[362880, 120, 24, 2, 5040, 120, 720, 40320, 720, 5040]
[1, 3, 5, 7, 9]

内置高阶函数reduce

reduce:接收两个参数,把一个函数作用在一个序列上,reduce会把
结果继续和序列的下一个元素做累积计算
reduce(f,[a,b,c,d,e]) = f(f(f(a,b),c),d)

输入

导入reduce函数
from functools import reduce

def multi(x,y):
    return x*y

print(reduce(multi,range(1,5)))

输出

24

内置高阶函数filter

filter过滤函数:接收一个函数和一个序列
filter函数把传入的函数依次作用于每个元素,然后根据返回值
是True汉时False来决定保留或者丢弃该元素

输入
def isodd(num):
if num % 2 == 0:
return True
else:
return False

print(list(filter(isodd,range(100))))

输出

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

内置高阶函数sorted

sorted:接收一个序列和一个函数进行进行排序

输入
#按照商品数量
def sorted_by_count(x):
return x[1]

#按照商品价格
def sorted_by_price(x):
    return x[2]

#先按数量由小到大,如果数量一样
#再按价格由小到大
def sorted_by_count_price(x):
    return x[1],x[2]

print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))

输出

[('x1', 200, 32), ('x2', 40, 12), ('x3', 40, 2), ('x4', 1000, 23), ('x5', 40, 5)]
[('x2', 40, 12), ('x3', 40, 2), ('x5', 40, 5), ('x1', 200, 32), ('x4', 1000, 23)]
[('x3', 40, 2), ('x5', 40, 5), ('x2', 40, 12), ('x4', 1000, 23), ('x1', 200, 32)]
[('x3', 40, 2), ('x5', 40, 5), ('x2', 40, 12), ('x1', 200, 32), ('x4', 1000, 23)]

反向排序
输入

li = [2,1,3,4]
li.sort(reverse=True)
print(li)
a = sorted(li)
print(a)

输出

[4, 3, 2, 1]
[1, 2, 3, 4]

匿名函数

匿名函数的关键字为lambda,冒号前面是形参,冒号后面是返回值
lambda匿名函数的应用:max,min,sorted,map,reduce,filte
输入

print('第一个项目:可变参数和关键字参数的实现')
from functools import reduce

def fun(*args,**kwargs):
    return args,kwargs

print(fun(1,2,3,4,5))

# 运用匿名函数实现上述功能
print(lambda *args,**kwargs:(args,kwargs),(1,2,3,4,5),{})

print('\n' + '第二个项目:累加计算')
def add(x,y):
    return x+y
# 接收两个参数,把一个函数作用在一个序列上,reduce会把结果继续和序列的下一个元素做累积计算
print('普通函数累加计算:',reduce(add,[1,2,3,4,5]))

# 运用匿名函数实现上述功能
print('匿名函数的累加计算:',reduce(lambda x,y:x+y,[1,2,3,4,5]))

print('\n' + '第三个项目:计算平方')
def mypow(x):
    return x ** 2

print(list(map(mypow,range(1,11))))

# 运用匿名函数实现上述功能
print(list(map(lambda x:x**2,range(1,11))))

输出

第一个项目:可变参数和关键字参数的实现
((1, 2, 3, 4, 5), {})
<function <lambda> at 0x7f45540589d8> (1, 2, 3, 4, 5) {}

第二个项目:累加计算
普通函数累加计算: 15
匿名函数的累加计算: 15

第三个项目:计算平方
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

局外人^旁观者

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值