用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下实例:
sum = lambda arg1, arg2: arg1 + arg2 # 调用sum函数 print("Value of total : " % sum( 10, 20 )) print("Value of total : "% sum( 20, 20 ))
以上实例输出结果:
Value of total : 30
Value of total : 40
Lambda函数能接收任何数量的参数但只能返回一个表达式的值
匿名函数不能直接调用print,因为lambda需要一个表达式
>>> def fun(a, b, opt): ... print("a = " % a) ... print("b = " % b) ... print("result =" % opt(a, b)) ... >>> fun(1, 2, lambda x,y:x+y) a = 1 b = 2 result = 3
2.作为内置函数的参数
stus = [ {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17} ]
>>> stus.sort(key = lambda x: x[‘name‘]) >>> stus [{‘age‘: 19, ‘name‘: ‘lisi‘}, {‘age‘: 17, ‘name‘: ‘wangwu‘}, {‘age‘: 18, ‘name‘: ‘zhangsan‘}]
>>> stus.sort(key = lambda x: x[‘age‘]) >>> stus [{‘age‘: 17, ‘name‘: ‘wangwu‘}, {‘age‘: 18, ‘name‘: ‘zhangsan‘}, {‘age‘: 19, ‘name‘: ‘lisi‘}]
例子1:
# 匿名函数 # 01: 对函数的另一种解释 # 02: 作为函数的参数传递 # 03: 应用于在列表中进行自定义排序(list.sort-> key) # 无参数无返回值 # def func1(): # print("你好") # func1() # 匿名函数的定义 f = lambda : print("你好") # 调用 f()
例子2:
# 无参数有返回值 # def func2(): # return 3.14 # pi = func2() # print(pi) # 匿名函数的定义 f = lambda : 3.14 pi = f() print(pi)
例子3:
# 有参数无返回值 # def func3(name): # print("你好%s" % name) # func3("中国") f = lambda name, age : print("你好%s--%d" % (name, age)) f("龟叔", 60)
例子4:
# 有参数有返回值 # def func4(a, b): # return a + b # ret = func4(10, 20) # print(ret) f = lambda a, b : a + b ret = f(20, 30) print(ret)
作为函数的参数传递
例子5:
# 01: b = 10 # 定义一个函数 计算两个数求和 一个数为10 另一个不确定 def add2num(a): ret = a + b print(ret) add2num(20)
例子6:
num = 10 # 定义一个函数 计算两个数求和 一个数为10 另一个不确定 def add2num(a, b): ret = a + b print(ret) add2num(20, num)
例子7:
# 02: def add2num(a, b): return a + b # result = add2num(10, 20) # print(result) my_func = add2num result = my_func(10, 20) print(result)
例子8:
# 03: # 定义一个函数计算三个数的求和 def add3num(a, b, c): return a + b + c # 定义一个函数计算三个数的平均值 def average3num(num1, num2, num3): ret = add3num(num1, num2, num3) return ret / 3 result = average3num(10, 20, 30) print(result)
例子9:
# def add3num(a, b, c): # return a + b + c # 转成匿名函数 f = lambda a, b, c : a + b + c # 定义一个函数计算三个数的平均值 def average3num(num1, num2, num3, func): ret = func(num1, num2, num3) return ret / 3 # result = average3num(10, 20, 30, f) result = average3num(10, 20, 30, (lambda a, b, c : a + b + c)) print(result)
应用于在列表中进行自定义排序(list.sort-> key)
例子10:
# 定义一个列表 my_list = [3, 5, 10, -100, 100] my_list.sort() print(my_list)
运行结果:
[-100, 3, 5, 10, 100]
例子11:
stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}] # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}] for dict in stus: print(dict["age"]) # age stus.sort(key=lambda dict:dict["age"]) print(stus)
运行结果:
18 19 17 [{‘name‘: ‘wangwu‘, ‘age‘: 17}, {‘name‘: ‘zhangsan‘, ‘age‘: 18}, {‘name‘: ‘lisi‘, ‘age‘: 19}]
例子12:
stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}] # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}] for dict in stus: print(dict["age"]) # age stus.sort(key=lambda dict:dict["age"], reverse=True) print(stus)
运行结果:
18 19 17 [{‘name‘: ‘lisi‘, ‘age‘: 19}, {‘name‘: ‘zhangsan‘, ‘age‘: 18}, {‘name‘: ‘wangwu‘, ‘age‘: 17}]
例子13:
stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}] # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}] for dict in stus: print(dict["age"]) # age # stus.sort(key=lambda dict:dict["age"], reverse=True) # print(stus) # name stus.sort(key=lambda dict: dict["name"]) print(stus)
运行结果:
18 19 17 [{‘age‘: 19, ‘name‘: ‘lisi‘}, {‘age‘: 17, ‘name‘: ‘wangwu‘}, {‘age‘: 18, ‘name‘: ‘zhangsan‘}]
例子14:
# 列表 m_list = [[10, 2, 111], [8, 2, 11], [9, 5, 100]] m_list.sort(key=lambda l:l[2]) print(m_list)
运行结果:
[[8, 2, 11], [9, 5, 100], [10, 2, 111]]
原文:https://www.cnblogs.com/kangwenju/p/12847010.html