匿名函数 藏匿名字的函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
Lambda函数能接收任何数量的参数但只能返回一个表达式的值
匿名函数不能直接调用print,因为lambda需要一个表达式
# 对函数的简写 # 无参数无返回值的函数 def my_print(): print("hello python") my_print() # 表达式的定义 f = lambda : print("hello python") f() # 等价于 (lambda : print("hello python"))() # 无参数有返回值的函数 def my_pi(): return 3.14 print(my_pi()) # 表达式的定义 f = lambda : 3.14 print(f()) # 定义一个有参数无返回值的函数 def my_print(name): print("你好%s" % name) my_print("龟叔") f = lambda name: print("你好%s" % name) f("龟叔") # 定义一个有参数有返回值的函数 def add2num(a, b): return a + b f = lambda a, b : a + b print(f(10, 20))
函数作为参数传递
f = lambda x,y:x+y
# 函数 def fun(a, b, opt): # print("a = %d" % a) # print("b = %d" % b) result = opt(a, b) print("result = %d" % result) # 调用函数 fun(1, 2, lambda x,y:x+y)
f = lambda x, y : x +y def fun(a, b, opt): result = opt(a, b) print("结果:%d" % result) fun(10, 10, f)
配合sort排序使用
# 自定义排序(最外层肯定是列表) stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}] # 按照年龄排序 stus.sort(key=lambda my_dict:my_dict["age"]) print(stus) # [{'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 19}] # 按照名字排序 # 使用的是每个名字的首字母排序 (规则是按照ascii码完成的) # 格式: 列表名.sort(key=lambda 列表的元素(临时变量): 临时变量[key]) stus.sort(key=lambda my_dict:my_dict["name"]) print(stus) # [{'name': 'lisi', 'age': 19}, {'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}]
# 列表中的列表嵌套 my_list = [[10, 8, 9], [7, 10, 19], [9, 10, 29]] # 按照列表元素(小列表)最后一个元素排序 # 格式: 列表名.sort(key=lambda 列表的元素(临时变量): 临时变量[下标索引]) my_list.sort(key=lambda new_list:new_list[2], reverse=True) print(my_list) # [[9, 10, 29], [7, 10, 19], [10, 8, 9]]