匿名函数
指一类无须定义标识符的函数或子程序。
Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)
语法: lambda 形参:返回值
lambda函数能接收任何数量的参数但只能返回一个表达式的值
# lambda 形参:返回值
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1, 2))
# 运行结果
3
应用场合1: 函数作为参数传递
# 函数作为参数传递
def fun(a, b=2, myfun=pow):
print('a = ', a, end=';')
print('b = ', b, end=';')
print('result = ', myfun(a, b))
fun(2)
fun(2, 3)
fun(2, 3, lambda x, y: x + y)
fun(2, 3, lambda x, y: x ** y)
# 运行结果
a = 2;b = 2;result = 4
a = 2;b = 3;result = 8
a = 2;b = 3;result = 5
a = 2;b = 3;result = 8
应用场合2: 作为内置函数的参数
问题1:复杂排序
from prettytable import PrettyTable as pt # 需要pip安装prettytable包
# 复杂的排序:
def pretty_show(goods):
"""
以表格的方式友好的显示商品信息
"""
# 实例化表格对象
table = pt()
# 往表格里面添加表头信息
table.field_names = ["Name", "Price", "Count"]
# 依次添加每一行商品的信息;
for good in goods:
table.add_row(good)
# 最终显示表格
print(table)
goods = [
# 商品名称 商品价格 商品的数量
["电脑", 5999, 100],
["电视", 1999, 1000],
["手机", 2999, 50],
]
pretty_show(goods)
# sorted方法, key:按照什么进行排序
# reverse=True 降序
# 按照商品的价格进行排序
sort_goods = sorted(goods, key=lambda x: x[1], reverse=True)
print("按照价格进行排序".center(30, '*'))
pretty_show(sort_goods)
# 按照商品的数量进行排序
sort_count_goods = sorted(goods, key=lambda x: x[2])
print("按照商品数量进行排序".center(30, '*'))
pretty_show(sort_count_goods)
# 运行结果
+------+-------+-------+
| Name | Price | Count |
+------+-------+-------+
| 电脑 | 5999 | 100 |
| 电视 | 1999 | 1000 |
| 手机 | 2999 | 50 |
+------+-------+-------+
***********按照价格进行排序***********
+------+-------+-------+
| Name | Price | Count |
+------+-------+-------+
| 电脑 | 5999 | 100 |
| 手机 | 2999 | 50 |
| 电视 | 1999 | 1000 |
+------+-------+-------+
**********按照商品数量进行排序**********
+------+-------+-------+
| Name | Price | Count |
+------+-------+-------+
| 手机 | 2999 | 50 |
| 电脑 | 5999 | 100 |
| 电视 | 1999 | 1000 |
+------+-------+-------+
问题2
有一个整数列表(10个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面
list = [3, 1, 2, 5, 6, 9, 7, 4, 0, 8]
# 按照1和0排序,偶数为1,奇数为0,排序后奇数在前,偶数在后
print(sorted(list, key=lambda x: 1 if x % 2 == 0 else 0))
# 运行结果
[3, 1, 5, 9, 7, 2, 6, 4, 0, 8]
问题3
(2018-携程-春招题) 给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变; 在原始数组上进行移动操作, 勿创建新的数组
#输入: 数组的记录;0 7 0 2
#输出: 调整后数组的内容; 7 2 0 0
# 代码
list = [0, 3, 0, 1, 2, 0, 5, 6, 9, 0]
print(sorted(list, key=lambda x: 1 if x == 0 else 0))
# 运行结果
[3, 1, 2, 5, 6, 9, 0, 0, 0, 0]