python匿名函数

匿名函数定义: 匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。在通常情况下,这样的函数只使用一次。在 Python 中使用 lambda 表达式创建匿名函数。

  • Lambda 函数可用于任何需要函数对象的地方
  • 在语法上,匿名函数只能是单个表达式
  • 在语义上,它只是常规函数定义的语法糖。
  • lambda 表达式中不能使用 if,for,while, return等语句, 但可以使用三目运算符

lambda表达式:
语法:result = lambda [arg1 [, arg2, .... , argn]]: expression

  • result:用于保存 lambda 表达式的引用;
  • [arg1 [, arg2, … , argn]]:可选,指定要传递的参数列表,多个参数间使用英文的逗号进行分隔。
  • expression:必选,指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数。
add = lambda x,y: x+y
result = add(2,3)
print(result)
print(type(add))# <class 'function'>

func = lambda x: x**2  if x > 3 else x**3  # 如果x>3 执行x**2;如果x<=3,执行 x**2  
print(func(3))# 27
print(func(4))# 16

result = list(filter(lambda x: x%2 == 0),range(10))
print(result)# [0,2,4,6,8]

匿名函数使用场景:

  • 需要一个函数,但是又不想费神去命名这个函数;
  • 通常在这个函数只使用一次的场景下;
  • 可以指定短小的回调函数;
# 待排序的数据
students = [
    {'name': 'Alice', 'id': '1001', 'class': 'Class1'},
    {'name': 'Eve', 'id': '1005', 'class': 'Class2'},
    {'name': 'Charlie', 'id': '1003', 'class': 'Class1'},
    {'name': 'David', 'id': '1004', 'class': 'Class2'},
    {'name': 'Bob', 'id': '1002', 'class': 'Class1'},
    {'name': 'Frank', 'id': '1006', 'class': 'Class2'}
]

# students.sort()# TypeError: '<' not supported between instances of 'dict' and 'dict'

# 以名字排序
students.sort(key=lambda stu: stu["name"])
for s in students:
    print(s)

# # 以ID降序排序
students.sort(key=lambda stu: stu["id"],reverse=True)
for s in students:
    print(s)

三目运算符:
三目运算符也称为三元运算符,是指运算符在使用时,需要有三个操作数参与计算。
可以将 Python 中的三目运算符理解成是 if-else 分支语句的简化单行模式。

  • 语法格式: [on_true] if [expression] else [on_false]
    • on_true: 条件为真时的结果;
    • on_false: 条件为假时的结果;
    • expression: 判断条件;

Python 会先判断 expression 条件表达式的结果,如果条件为真,则结果为 [on_true] ,条件为假,则结果为 [on_false]