课程:B站大学
记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化
匿名函数
- 匿名函数
- 实践是检验真理的唯一标准
匿名函数
匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。
在通常情况下,这样的函数只使用一次。
在 Python 中使用 lambda 表达式创建匿名函数。
lambda 表达式可用于任何需要函数对象的地方。
在语法上,匿名函数只能是单个表达式。
在语义上,它只是常规函数定义的语法糖。
lambda 表达式中不能使用 if、for-in、while、return 等语句, 但可以使用三目运算符
lambda 表达式
格式:
result = lambda [arg1 [, arg2, … , argn]]: expression
result:用于保存 lambda 表达式的引用
[arg1 [, arg2, … , argn]]::可选,指定要传递的参数列表,多个参数间使用英文的逗号 , 进行分隔。
expression:必选,指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数。
示例:
def add(n1, n2):return n1 + n2result = add(1,2)
print(result)add = lambda x,y: x+y
result = add(2,3)
print(result)func = lambda x: x**2 if x > 3 else x**3
print(func(3))
使用场景
通常在这个函数只使用一次的场景下
可以指定短小的回调函数
比如,在学习列表时的 sort() 排序方法,如果是简单的基本数据类型的数据,可以直接进行排序,但如果是复杂结构的数据,需要根据自定义的规则进行排序,此时就可以使用 lambda。
示例:
# 待排序的数据
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'}
]
# TypeError: '<' not supported between instances of 'dict' and 'dict'
# students.sort()# 以名字排序
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)
Sorted 函数实现原理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'}
]def mySorted(obj, key=None, reverse=False):newStus = []for s in students:for n in newStus:if key:if(key(s) < key(n)):idx = newStus.index(n)newStus.insert(idx, s)breakelse:if (s < n):idx = newStus.index(n)newStus.insert(idx, s)breakelse:newStus.append(s)return newStus if reverse else newStus[::-1]# students = mySorted(students, key=lambda s: s["name"])
# students.sort(key=lambda s: s["name"])
students = [1,4,2,6,7,8,4,3,3]
students = mySorted(students, reverse=True)
print(students)
for s in students:print(s)
匿名函数好处:用于一次性处理的函数,用lambda 表达式方便运算