匿名、高阶函数--(python12)

1. 匿名函数lambda

定义的格式:
lambda [形参1],[形参2]:[单行的表达式]或[函数调用]

注意:

与普通函数的区别
1.没有函数名
2.参数列表没有括号
3.函数体中,只能实现简单的表达计算或者函数调用
4.不能使用while for if
5.可以使用if实现三目运算符,a if a>b else b

函数的引用,一个函数可以把他的引用赋值给一个变量,或者函数,这个时候不需要()

'''
使用场景:简单的一次性的使用
'''
# 检讨过一个函数的引用(也就是id)赋值给另一个变量
def show():
    print("hello world!")
print(show)
# 注意此时不能加上括号,加上就表示函数的运行结果给了func
func = show
func()
# 实现一个函数发引用赋值给另一个函数的函数
def display():
    print('dispaly run ')
def call_dis(func):
    func()
#     注意此时不能带括号
call_dis(show)
call_dis(display)

匿名函数的应用

'''
定义一个匿名函数

注意:
默认返回表达式的计算结果,不需要return,加了报错
不能使用循环
'''
func = lambda  :1+1
print(func)
print(func())

func  =lambda x:print(x ** 10)
func(2)

# 三目运算符
func2 = lambda a,b:a if a>b else b
print(func2(1, 3))

2.高阶函数

2.1 map()函数

map 函数:是对参数列表中的元素做一个映射
案例:

m_list = [1,2,3,4]

def f(x):
    return x **2
# result = map(f,m_list)
# 利用lambda代替函数
result =map(lambda n:n**4,m_list)
for i in result:
    print(i)
print(type(result))


# map的实现原理
def my_map(func,c_list):
    new_list=[]
    for i in c_list:
        n = func(i)
        new_list.append(n)
    return new_list

2.2 reduce函数

reduce不能直接的使用,需要导入模块functools
作用:根据传入的参数一对参数二中的数据进行累计

import  functools
my_list = list('hello')
result =functools.reduce(lambda s1,s2:s1+s2,my_list)
print(result)

# 实现阶乘
l1 = [i for i in range(1,5)]
print(l1)
re = functools.reduce(lambda n1,n2:n1*n2,l1)
print(re)

2.3 filter函数过滤的作用

my_list =['hello', 'a', 'b', 'abc123','1']
l1 = filter(lambda s: s.isdigit(),my_list)
print(l1)
for i in l1:
    print(i)

2.4 sort函数的参数key的用法

'''
函数sort
'''
my_list = [7,8,9,0,34,56,65,4,3]
my_list.sort()
print(my_list)

l1 = [{'id':1,'namae':'tom','age':92},{'id':3,'namae':'tom','age':50},{'id':2,'namae':'tom','age':32}]
# 默认sort不能对字典进行比较
# 这个时候可以使用sort的参数key的作用
# 按照id升序
l1.sort(key=lambda d:d['id'])
print(l1)
# 按照年龄
# l1.sort(key=lambda d:d['age'])
l1.sort(key=lambda d:d['age'],reverse=True)

print(l1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值