Python函数基础(四)

文章目录(PS:觉得不错请点赞收藏支持一下)

一、lambda 表达式

  1. 语法
lambda 参数列表: 表达式
  1. 举例
  • 普通
"""
1. 使用 lambda 表达式定义了一个函数
2. 使用 lambda 表达式定义的函数没有名字(匿名函数)
3. 冒号后面是函数的返回值,不要使用 return 进行返回
"""
f2 = lambda : 100
res = f2()
print(res)  # 100

"""
注意
> lambda 表达式的参数可有可无,函数的参数在 lambda 表达式中完全适用
> lambda 表达式能接收任何数量的参数但只能返回一个表达式的值
"""
  • 求和
"""
在 lambda 关键字和冒号之间是函数的参数(可以是多个参数)
"""
f4 = lambda a: a + 100
res = f4(100)
print(res)  # 200

f6 = lambda a,b: a + b
res = f6(10,20)
print(res) # 30
  1. 参数
# 可变参数
f1 = lambda *args: sum(args)
print(f1(1,2,3,4,5))  # 15

f2 = lambda **kwargs: kwargs
print(f2(name='张三',age=20))  #{'name': '张三', 'age': 20}
  1. 进阶练习
# 判断大小
compare = lambda a,b: a if a > b else b
print(compare(10,66)) # 66

# 按照人的年龄进行排序
students = [{'name': 'TOM', 'age': 20}, {'name': 'ROSE', 'age': 19}, {'name':'Jack', 'age': 22}]
students.sort(key= lambda age: age['age'])
print(students)
# 运行结果:
# [{'name': 'ROSE', 'age': 19}, {'name': 'TOM', 'age': 20}, {'name': 'Jack', 'age': 22}]'
  1. 总结
lambda 表达式的认识
1. lambda 表达式的函数是匿名函数
2. lambda 表达式是为了简化函数的定义
3. lambda 表达式冒号后面只能有一行代码,原因是冒号后面的代码就是普通函数 return 后面内容

lambda 表达式与普通函数的对比
1. lambda 方式不用为函数起名字
2. lambda 方式一行代码搞定
3. 对于只使用 1 次的函数,没必要单独定义,使用 lambda 方式非常快捷

二、高阶函数

解释说明:如果一个函数的参数是函数,此函数就叫做高阶函数。

2.1 普通
  1. 只定义一个函数,就可以都执行加减乘除运算
def do_everything(a,b,fn):
    return fn(a,b)
print(do_everything(10,5,lambda n1,n2: n1 + n2)) # 15
print(do_everything(10,5,lambda n1,n2: n1 - n2)) # 5
print(do_everything(10,5,lambda n1,n2: n1 * n2)) # 50
print(do_everything(10,5,lambda n1,n2: n1 / n2)) # 2.0
2.2 内置
  1. map() 函数方法
list1 = [10,55,2,6,8]
def f1(x):
    return x * 2
res = map(f1,list1)
print(list(res))  # [20, 110, 4, 12, 16]
  1. filter() 函数方法
"""
如果只想获取列表中符合条件的元素 使用 filter() 方法
将列表中所有大于 10 的数字放到一个新列表中
"""
l1 = [10,20,5,6,8,66]
def f1(x):
    if x > 10:
        return x
res = filter(f1,l1)
print(list(res))  # [20, 66]
  1. reduce() 函数方法
"""
reduce(func,lst) 方法
其中 func 必须要有两个参数,每次 func 计算的结果继续和序列中的下一个元素累积计算
"""
import functools
l1 = [10,20,5,6,8,66]
def f1(a,b):
    return a+b

res = functools.reduce(f1,l1)
print(res)   # 115

三、任务清单

  1. 写函数,接收n个数字,返回所有参数的和(使用 lambda 表达式改写函数)
f1 =lambda *args: sum(args)
print(f1(10,20,30))  # 60
  1. 定义一个函数,接受一个列表作为参数,找到这个列表中下标为奇数对应的元素,放到一个新列表中,并将其作为返回值返回(使用 lambda 表达式改写函数)
f1 = lambda list1: [list1[i] for i in range(len(list1)) if i % 2 != 0]
print(f1(['张三','法外狂徒','小明','老王',True,666])) # ['法外狂徒', '老王', 666]
  1. 写一个函数,参数为一个列表,返回列表中的前两个元素(放到一个新列表中即可)(使用 lambda 表达式改写函数)
f1 = lambda list1: list1[:2] if len(list1) > 2 else list1
print(f1(['张三','法外狂徒','小明','老王',True,666])) # ['张三', '法外狂徒']
  1. 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组。例如:[(‘红心’,2), (‘草花’,2), …(‘黑桃,‘A’)]。
f1 = lambda list1,list2:[(x,y) for x in list1 for y in list2]
print(f1(['红心','草花','方块','黑桃'],[2,3,4,5,6,7,8,9,10,'J','Q','K','A']))
  1. 写函数,传入n个数,返回字典:{‘max’:最大值,’min’:最小值}。例如: min_max(2, 5, 7, 8, 4),返回: {‘max’:8,’min’:2}。
f1 = lambda *args: {'max':max(args),'min':min(args)}
print(f1(2, 5, 7, 8, 4)) # {'max': 8, 'min': 2}
  1. 写函数,专门计算图形的面积。其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积(高阶函数练习)。
def result(x,y,fn):
    return fn(x,y)
print(result(2,5,lambda x,y: x * y ** 2))   # 圆的面积
print(result(2,5,lambda x,y: x ** 2))   # 正方形的面积
print(result(2,5,lambda x,y: x * y))   # 长方形的面积
  1. 生成20个斐波那契数列:[1,1,2,3,5,8,13,…],每个元素为前两个元素之和。
fib = lambda n: n if n < 2 else fib(n - 1) + fib(n - 2)
listData = [fib(i) for i in range(1,21)]
print(listData)
  1. 已知有个列表[1,2,3,4,5],让列表的每个元素加1,把结果不能被2整除的元素筛选出来。
f1 = lambda list1: [i for i in list1 if (i+1) % 2 != 0]
print(f1([1,2,3,4,5]))  # [2, 4]

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张浔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值