一、匿名函数
匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。(省略了用def声明函数的标准步骤)
lambda函数的语法只包含一个语句,如下:
lambda [arg1[,arg2,...argn]] : expression
lambda函数能接收任何数量的参数但只能返回一个表达式的值
二、实例
(1)引入
def sum(arg1:int , arg2:int):
"""
求两数的和
:param arg1:
:param arg2:
:return:
"""
return arg1 +arg2
print("运行结果:",sum(3,4))
print("匿名函数".center(50,'*'))
lambda_sum = lambda a,b : a+b
print("运行结果:",sum(2,4))
def mypow(num1,num2=2):
"""
num1的num2次方
:param num1:
:param num2:
:return:
"""
return num1**num2
print("运行结果:",mypow(2,3))
print("匿名函数".center(50,'*'))
lambda_mypow = lambda num1,num2=2 : num1**num2
print(lambda_mypow(3))
def myFun(num1, num2, fun=pow):
print('num1=', num1, end=', ')
print('num2=', num2, end=', ')
print("result=", fun(num1, num2))
myFun(1, 2, lambda x, y: x + y)
myFun(1, 2, lambda x, y: x * y)
myFun(1, 2, lambda x, y: x ** y)
myFun(1, 2)
(2)、进阶----作为内置函数的参数
def pretty_show(goods):
"""
以表格的方式友好的显示商品信息
:param goods:
:return:
"""
#该模块需要自行安装 pip install prettytable
# 导入prettytable模块里面的类PrettyTable, 并起一个别名pt
from prettytable import PrettyTable as pt
table = pt() ##将实例化表哥对象
#往表格里添加表头信息
table.field_names = ["Name","Price","Count"]
#依次添加每一行的商品的信息
for good in goods:
table.add_row(good)
print(table) ##最终显示表格
goods = [
#商品信息,商品价格,商品数量‘ ***注意:列表里的元素由 , 分开
['computer',3000,6000],
['iphone',6000,2500],
['TV',2000,5000]
]
pretty_show(goods)
# sorted方法, key:按照什么进行排序, lambda x: x[1] x=["电脑", 5999, 100],
# reverse=True按照商品的价格进行从大到小排序
sort_goods = sorted(goods,key= lambda x:x[1] ,reverse=True)
print(sort_goods)
print("按照价格进行排序".center(50,'*'))
pretty_show(sort_goods)
print("按数量进行排序".center(50,'*'))
sort_count_goods = sorted(goods,key= lambda x:x[2] ,reverse=True)
pretty_show(sort_count_goods)
三、练习
问题描述1: 有一个整数列表(10个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面,
"""
有一个整数列表(10个元素), 要求调整元素顺序,把所有的奇数放在前面,偶数放在后面,
"""
la =[2,5,3,24,12,13,11,41,10,7]
print(sorted(la,key=lambda x : 1 if x %2== 0 else 0))
问题描述2:(2018-携程-春招题)
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
#输入: 数组的记录;0 7 0 2
#输出: 调整后数组的内容; 7 2 0 0
"""
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
#输入: 数组的记录;0 7 0 2
#输出: 调整后数组的内容; 7 2 0 0
"""
li =[0,7,0,2]
print(sorted(li,key=lambda x : 1 if x == 0 else 0))
print(li)
"""
用sort方法会改变原数组
"""
print(li.sort())
print(li)