Python教程

Python函数基础(四)

本文主要是介绍Python函数基础(四),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

    • 一、lambda 表达式
    • 二、高阶函数
    • 三、任务清单

一、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 方式非常快捷

二、高阶函数

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

  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

三、任务清单

  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]

在这里插入图片描述

这篇关于Python函数基础(四)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!