課程: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 表達式方便運算