Biểu thức lambda là gì? & Nbsp; biểu thức Lambda là một cú pháp đặc biệt để tạo các hàm mà không có tên. Các chức năng này được gọi là chức năng Lambda. Các hàm Lambda này có thể có bất kỳ số lượng đối số nào nhưng chỉ có một biểu thức cùng với câu lệnh trả về ngầm. Biểu thức lambda trả về các đối tượng chức năng. Ví dụ: hãy xem xét biểu thức Lambda: & nbsp; & nbsp;
A lambda expression is a special syntax to create functions without names. These functions are called lambda functions. These lambda functions can have any number of arguments but only one expression along with an implicit return statement. Lambda expressions return function objects. For Example consider the lambda
expression:
lambda [arguments] : [expression]
Biểu thức Lambda này xác định một hàm không tên, chấp nhận hai đối số và trả về tổng của hai đối số. Nhưng làm thế nào để chúng ta gọi một chức năng không tên? Hàm Lambda không tên được xác định ở trên có thể được gọi là: & nbsp; & nbsp;unnamed function, which accepts two arguments and returns the sum of the two arguments. But how do we call an unnamed function? The above defined unnamed lambda function can be called as:
[lambda x, y: x + y][1, 2]
Mã 1: & NBSP;
Python3
[lambda x, y: x + y][1, 2]9
9 20
9 21
9 22
9 23
9 24
9 25__
114
115
116
9 20
9 21
9 22
9 23__
114
50
Output:
9 2
Mặc dù nó không được khuyến khích, đối tượng hàm được trả về bởi biểu thức lambda có thể được gán cho một biến. Xem ví dụ dưới đây trong đó một tổng biến được gán một đối tượng hàm được trả về bởi biểu thức lambda. & Nbsp; & nbsp;
Python3
51
9 20
9 22
54
9 24
56
114
9 21
59
9 21
51
52
[lambda x, y: x + y][1, 2]9
9 20
51
9 21
57
9 29
59
113
114
115
Output:
11
Công dụng phổ biến của biểu thức lambda: & nbsp;
- Vì các hàm Lambda là ẩn danh và không yêu cầu được gán tên, nên chúng thường được sử dụng để gọi các hàm [hoặc lớp] yêu cầu một đối tượng chức năng làm đối số. Xác định các chức năng riêng cho các đối số chức năng đó không được sử dụng bởi vì, định nghĩa hàm thường ngắn và chúng chỉ được yêu cầu một hoặc hai lần trong mã. Ví dụ: đối số chính của hàm sẵn có, Sắp xếp []. & Nbsp; & nbsp;used to call functions[or classes] which require a function object as an argument. Defining separate functions for such function arguments is of no use because, the function definition is usually short and they are required only once or twice in the code. For example, the key argument of the inbuilt function, sorted[].
Python3
three3
three4
three5
three6
three7
three8
110
three0
9 20
three2___
[lambda x, y: x + y][1, 2]13
9 20
[lambda x, y: x + y][1, 2]15
[lambda x, y: x + y][1, 2]16
9 20
[lambda x, y: x + y][1, 2]18
114
[lambda x, y: x + y][1, 2]20
- Output:
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
Python3
three0
9 20
three2___
[lambda x, y: x + y][1, 2]13
9 20
[lambda x, y: x + y][1, 2]15
[lambda x, y: x + y][1, 2]16
9 20
[lambda x, y: x + y][1, 2]18
114
[lambda x, y: x + y][1, 2]55
- Output:
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
[lambda x, y: x + y][1, 2]
449 2
0[lambda x, y: x + y][1, 2]
15[lambda x, y: x + y][1, 2]
16__used whenever there is a need of repetitive function calls to reduce execution time. Some of the examples of such scenarios are the functions: map[], filter[] and sorted[]. For example,
Python3
Các hàm Lambda là các hàm nội tuyến và do đó chúng được sử dụng bất cứ khi nào cần các cuộc gọi chức năng lặp đi lặp lại để giảm thời gian thực hiện. Một số ví dụ về các kịch bản như vậy là các hàm: map [], filter [] và sort []. Ví dụ: & nbsp; & nbsp;
A
[lambda x, y: x + y][1, 2]79
9 20
[lambda x, y: x + y][1, 2]81
9 21
9 22
[lambda x, y: x + y][1, 2]84
9 26
[lambda x, y: x + y][1, 2]86
114
9 21
[lambda x, y: x + y][1, 2]89
[lambda x, y: x + y][1, 2]90
[lambda x, y: x + y][1, 2]91
9 20
[lambda x, y: x + y][1, 2]93
9 21
9 22
[lambda x, y: x + y][1, 2]96
[lambda x, y: x + y][1, 2]97
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
114
9 21
[lambda x, y: x + y][1, 2]89
9 213
9 206
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]9
9 208
9 209
Pros and Cons of lambda functions :
Pros of lambda functions:
- & nbsp; & nbsp; ưu và nhược điểm của các hàm Lambda: & nbsp; Ưu điểm của các hàm Lambda: & nbsp; & nbsp;
- Là ẩn danh, các hàm Lambda có thể dễ dàng được truyền mà không được gán cho một biến.
- Các hàm Lambda là các hàm nội tuyến và do đó thực hiện tương đối nhanh hơn.
Python3
Nhiều lần chức năng Lambda làm cho mã dễ đọc hơn nhiều bằng cách tránh các bước nhảy logic gây ra bởi các cuộc gọi chức năng. Ví dụ: đọc các khối sau của mã. & Nbsp; & nbsp;
three3
9 215
three5
three6
three7
9 26
56
9 24__
9 223
9 20
9 28
9 226
9 20
110
9 229
9 20
112
114
9 236
- Output:
5
Python3
9 232
9 20
9 234
114
9 253
- Output:
5
Nhược điểm trên các hàm Lambda: & NBSP;
- Các hàm Lambda có thể chỉ có một biểu thức.
- Các chức năng Lambda không thể có một tài liệu.
- Nhiều lần chức năng Lambda làm cho mã khó đọc. Ví dụ: xem các khối mã được đưa ra dưới đây. & Nbsp; & nbsp;
Python3
three3
9 255
three5___
9 263
three6
9 265
three5
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]9
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
9 258__
9 263
three6
9 276
three5
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]9
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
9 258__
9 263
three6
9 287
three5
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]9
9 262
9 263
three6
9 293
9 294
9 20
9 296
112
113
114
1100
- Output:
three
Python3
9 294
9 20
9 21
9 22
[lambda x, y: x + y][1, 2]96
9 265
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
9 258__
1120
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]9
9 21
9 287
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
9 258__
114
1100
- Output:
three
& nbsp; & nbsp; lạm dụng các biểu thức lambda: & nbsp;
Misuse of Lambda expressions :
- Việc gán các biểu thức Lambda: Hướng dẫn theo phong cách Python chính thức PEP8, không khuyến khích việc gán các biểu thức Lambda như trong ví dụ dưới đây. The official python style guide PEP8, strongly discourages the assignment of lambda expressions as shown in the example below.
[lambda x, y: x + y][1, 2]0
- Thay vào đó, nên viết một chức năng một lớp lót như,
[lambda x, y: x + y][1, 2]1
- Mặc dù phương pháp thứ hai khuyến khích thực tế là các hàm Lambda là ẩn danh, nhưng nó cũng hữu ích cho các dấu vết trong quá trình gỡ lỗi. Chạy mã bên dưới để xem làm thế nào def làm cho Tracebacks hữu ích nhiều. & Nbsp; & nbsp;def makes tracebacks much useful.
Python3
1136
9 20
9 22
1139
9 26
1141
9 24
9 222
114
1145
three3
1147
three6
9 258
9 26
1141
9 24
9 222
114
1145
- Kết thúc các biểu thức Lambda xung quanh các hàm: Nhiều lần, các biểu thức Lambda không cần thiết xung quanh các chức năng như hình dưới đây. Many times, lambda expressions are needlessly wrapped around functions as shown below.
[lambda x, y: x + y][1, 2]2
- Mặc dù cú pháp trên là hoàn toàn chính xác, các lập trình viên phải hiểu rằng tất cả các chức năng trong Python có thể được truyền dưới dạng các đối tượng chức năng. Do đó, cùng một mã có thể [và nên] được viết là,
[lambda x, y: x + y][1, 2]3
- Vượt qua các chức năng không cần thiết: Nhiều lần, các lập trình viên vượt qua các chức năng chỉ thực hiện một thao tác duy nhất. Xem mã sau. Many times, programmers pass functions which perform only a single operation. See the following code.
[lambda x, y: x + y][1, 2]4
- Hàm Lambda được truyền ở trên chỉ thực hiện một thao tác duy nhất, thêm hai đối số. Kết quả tương tự có thể thu được bằng cách sử dụng tổng chức năng tích hợp, như được hiển thị bên dưới. & Nbsp; & nbsp;sum, as shown below.
[lambda x, y: x + y][1, 2]5
- Các lập trình viên nên tránh sử dụng các biểu thức lambda cho các hoạt động chung, bởi vì rất có thể có chức năng tích hợp cung cấp kết quả tương tự.
& nbsp; & nbsp; lạm dụng các biểu thức lambda: & nbsp;
Overuse of lambda expressions :
- Sử dụng Lambda cho các chức năng không tầm thường: Đôi khi, các chức năng đơn giản có thể không tầm thường. Xem mã bên dưới.Sometimes, simple functions can be non-trivial. See the code below.
Python3
Các
1175
1176
1159
9 262
1179
9 29
1163
9 262
1183
9 29
1167
9 262
9 28
9 29
1171
9 262
[lambda x, y: x + y][1, 2]03
1174
1175
1176
1159
9 262
1197
9 29
1163
9 262
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]01
9 29
1167
9 262
[lambda x, y: x + y][1, 2]03
9 29
1171
9 262
110
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]10
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]11
9 20
[lambda x, y: x + y][1, 2]15
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]14
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]15
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]16_______
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]30
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]26
1167
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]33
9 26
9 26
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]36
1167
[lambda x, y: x + y][1, 2]12
9 26
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]26
1171
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]42
114
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]44
- Output:
[{'n': 2, 'r': 0,01, 't': 4, 'p': 100}, {'n': 5, 'r': 0,05, 't': 2, 'p': 120}, {'n': 1, 'r': 0,04, 't': 5, 'p': 150}] & nbsp; & nbsp;
- Ở đây, chúng tôi đang sắp xếp các từ điển trên cơ sở lợi ích hỗn hợp. Bây giờ, xem mã được viết dưới đây, sử dụng def.def.
Python3
Các
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]11
9 20
[lambda x, y: x + y][1, 2]15
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]14
1175
1176
1159
9 262
1197
9 29
1163
9 262
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]01
9 29
1167
9 262
[lambda x, y: x + y][1, 2]03
9 29
1171
9 262
110
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]10
three3
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]01
three5___
‘
114
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]44
- Output:
[{'n': 2, 'r': 0,01, 't': 4, 'p': 100}, {'n': 5, 'r': 0,05, 't': 2, 'p': 120}, {'n': 1, 'r': 0,04, 't': 5, 'p': 150}] & nbsp; & nbsp;
- Mặc dù cả hai mã đều làm điều tương tự, bản thứ hai sử dụng DEF dễ đọc hơn nhiều. Biểu thức được viết ở đây dưới Lambda có thể đơn giản, nhưng nó có ý nghĩa [công thức cho lợi ích hỗn hợp]. Do đó, biểu thức là không tầm thường và xứng đáng với một cái tên. Sử dụng các biểu thức lambda cho các hàm không tầm thường làm giảm khả năng đọc của mã.def is much more readable. The expression written here under the lambda might be simple, but it has a meaning[formula for compound interest]. Hence, the expression is non-trivial and deserves a name. Using lambda expressions for non-trivial functions reduces the readability of the code.
- Sử dụng lambdas khi nhiều dòng sẽ giúp: nếu sử dụng hàm nhiều dòng làm cho mã dễ đọc hơn, sử dụng các biểu thức Lambda để giảm một số dòng mã không đáng giá. Ví dụ: xem mã bên dưới.If using a multiple line function makes the code more readable, using lambda expressions to reduce some lines of code is not worth it. For example, see the code below.
People = [['Sam', 'M', 18], ['Susan', 'F', 22], ['Joy', 'M', 21], ['Lucy', 'F', 12] ] & nbsp; sort_people = sort [con người, key = lambda x: x [1]] & nbsp; & nbsp;
sorted_people = sorted[people, key=lambda x: x[1]]
- Cũng xem mã sau sử dụng def.def.
[lambda x, y: x + y][1, 2]6
- Xem cách giải nén Tuple trong khối thứ hai của mã làm cho nó dễ đọc và hợp lý hơn nhiều. Khả năng đọc của mã nên ưu tiên tối đa của một lập trình viên, làm việc trong môi trường hợp tác.
- Sử dụng các biểu thức Lambda cho bản đồ và bộ lọc: LambDas được sử dụng rất phổ biến với MAP [] và Filter [] như được hiển thị. Lambdas are very commonly used with map[] and filter[] as shown.
Python3
three0
9 20
three2___
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]50
9 20
[lambda x, y: x + y][1, 2]81
9 21
9 22
[lambda x, y: x + y][1, 2]84
9 26
[lambda x, y: x + y][1, 2]86
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]58
9 20
[lambda x, y: x + y][1, 2]93
9 21
9 22
[lambda x, y: x + y][1, 2]84
three8
114
9 21
[lambda x, y: x + y][1, 2]89
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]70
114
9 21
[lambda x, y: x + y][1, 2]89
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]74
- Sau đây là một khối mã khác sử dụng các biểu thức máy phát để đạt được kết quả tương tự.
Python3
three0
9 20
three2___
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]50
9 20
[lambda x, y: x + y][1, 2]81
9 21
9 22
[lambda x, y: x + y][1, 2]84
9 26
[lambda x, y: x + y][1, 2]86
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]58
9 20
[lambda x, y: x + y][1, 2]93
9 21
9 22
[lambda x, y: x + y][1, 2]84
three8
114
9 21
[lambda x, y: x + y][1, 2]89
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]70
Sau đây là một khối mã khác sử dụng các biểu thức máy phát để đạt được kết quả tương tự.
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
509 2
0[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
0__269 2
58[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
959 2
58[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
97[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
98
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
589 2
0[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
0[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
959 2
58[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
97 The functions which accept other function objects as arguments are called higher order functions [i.e. map[] and filter[]], which are common in functional programming. As stated above, lambda expressions are commonly used as the function arguments of higher order functions. Compare the two code blocks shown below.
Using high order function reduce[]
[lambda x, y: x + y][1, 2]7
11
49 2
1[lambda x, y: x + y][1, 2]
89[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
74
[lambda x, y: x + y][1, 2]8
- Không giống như Map [] và Filter [], các biểu thức tạo là các tính năng mục đích chung của ngôn ngữ Python. Do đó, máy phát điện tăng cường khả năng đọc của mã. Trong khi, map [] và filter [] yêu cầu kiến thức trước về các chức năng này. & Nbsp;