python之高阶函数

本文介绍了Python的高阶函数,包括定义与使用。详细讲解了内置的map()、filter()和sorted()函数,并提供了相关练习。同时,探讨了匿名函数的应用,如求平方、阶乘,并提到了匿名函数的默认参数、可变参数和关键字参数的使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.高阶函数的定义与使用

abs与abs()的区别
abs() # 返回值
abs # 返回整个函数

# 求绝对值
print('求出来的绝对值为:',abs(-11)) 

# 函数本身可以赋值给变量,变量也可以指向函数
# 调用函数来求绝对值
f=abs
print('求出来的绝对值为:',f(-10)) 

# 传递的函数包括函数名
def fun(x,y,f):    
    return f(x),f(y)
print('求出来的绝对值为:',fun(-10,34,abs))

在这里插入图片描述

2.内置函数

(1)a.map()函数练习
import random
# 对于序列[-1,3,-5,-4]的每个元素求绝对值
print(list(map(abs,[-1,3,-5,-4]))) 
# 对于序列的每个元素求阶乘(10个,2~7之间的随机)
for n in range(10):    
    n=random.randint(2,7)
def jc(n):    
    sum = 1    
    for i in range(1,n+1):        
        sum*=i    
    return sum
li=[random.randint(2,7) 
for i in range(10)] 
    print(list(map(jc,li)))

在这里插入图片描述

(2)filter函数
# 求1~100之间的偶数
def isodd(num):    
    if num % 2 == 0:        
        return True    
    else:        
        return False
print(list(filter(isodd,range(100))))

# 求1~100之间的素数
def zhishu(num):    
    for i in range(2,num):        
        if num % i ==0:            
            return False    
        else:        
            return True
print(list(filter(zhishu,range(2,100))))

在这里插入图片描述

(4)sorted函数
# 调用排序方法sort进行排序
li = [5,2,4,2,3]
li.sort()
# 这是逆序
li.sort(reverse=True)
print(li)

# 使用sorted函数进行排序(逆序)
a=sorted(li,reverse=True)
print(a) 

# 分别根据商品的数量,价格和名称对商品进行排序
info = {    ('apple1',32,3),    ('apple2',20,2),    ('apple3',42,3),    ('apple4',32,4)} 

# 默认按照商品名称进行排序
print(sorted(info)) 

# 按照商品数量进行排序
def sorted_count(x):    
    return x[1]
print(sorted(info,key=sorted_count)) 
# 按照商品价格进行排序
def sotred_price(x):    
    return x[2]
print(sorted(info,key=sotred_price))
    
# 先按照商品数量进行排序,如果数量一样,就按照商品价格进行排序
def sorted_count_price(x):    
    return x[1],x[2]
print(sorted(info,key=sorted_count_price))

在这里插入图片描述

练习
在原始数组上进行操作,勿创建新的数组
输入:第一行是数组长度4 0 7 0 2
输出:调整后数组的内容4 7 2 0 0

# 定义用户输入的变量
n = ''.join(input('请输入:').split())

# 接收用户的输入为列表
li = [int(i) for i in n ]
def sorted_li(i):  
# 把列表中的零元素用1代替    
    if i == 0:        
        return 1    
    # 把列表中非零元素用0代替   
    else:        
        return 0
# 按照返回值对列表中元素进行排序
print(sorted(li,key=sorted_li))

在这里插入图片描述

3.匿名函数

求平方
求阶乘
匿名函数的默认参数
匿名函数的可变参数
关键字参数

from functools import reduce
# 用reduce调用匿名函数实现x+y
print(reduce(lambda x,y:x+y,[1,2,3,4,5]))
# 用map调用匿名函数实现x**2
print(list(map(lambda x:x**2,range(10))))
# 用匿名函数求阶乘
print('求得10的阶乘为:',reduce(lambda x,y:x*y,range(1,10)))
# 匿名函数的默认参数
f = lambda 
x,y=2:x**y          # 一定要把匿名函数赋值给一个变量,不然不能调用
print('求3的平方:',f(3))       # 没有指定,所以用默认参数2
print('求2的4次方为:',f(2,4))  # 指定默认参数为4,所以4代替默认参数 

# 匿名函数的可变参数
f= lambda *args:sum(args)
print('求得的序列的和为:',f(1,34,32,43,1,)) 
# 匿名函数的关键字参数
f1 = lambda **kwargs:kwargs.keys()     # 定义匿名函数输出key值
f2 = lambda **kwargs:kwargs.values()   # 定义匿名函数输出value值
print('输出key值为:',f1(name='lala',age=18))
print('输出value值为:',f2(name='lala',age=18))

在这里插入图片描述

练习
nums = [0 ,7 ,0 ,1 ,2 ,1 ,5 ,1 ,7 ,8 ,0 ,67 ,1 ,3 ,4],把0排到最后,其余数字不用排序

nums = [0 ,7 ,0 ,1 ,2 ,1 ,5 ,1 ,7 ,8 ,0 ,67 ,1 ,3 ,4]
print(sorted(nums,key=lambda x:1 if x == 0 else 0))	

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值