Python之匿名函数

匿名函数

指一类无须定义标识符的函数或子程序。

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]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值