Không có sự khác biệt trong việc gọi một lambda so với một chức năng. Một lambda chỉ là một hàm được tạo với một biểu thức duy nhất và không có tên.
Giả sử chúng ta có hai chức năng giống hệt
def a[]:
return 222*333
b = lambda: 222*333
Chúng tôi thấy rằng cả hai đều là cùng một loại đối tượng hàm và cả hai đều chia sẻ mã byte tương đương:
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
Làm thế nào bạn có thể tăng tốc độ? Bạn không. Đó là Python. Nó được tối ưu hóa trước cho bạn. Không có gì để bạn làm với mã này.pre-optimized for you. There's nothing more for you to do with this code.
Có lẽ bạn có thể đưa nó cho một thông dịch viên khác, hoặc viết lại nó bằng một ngôn ngữ khác, nhưng nếu bạn đang gắn bó với Python, thì không có gì để làm bây giờ.
Thời gian nó
Đây là cách tôi sẽ kiểm tra thời gian.
Thời gian của
import timeit
3 và import timeit
4 đều có thể gọi được:import timeit
Lưu ý rằng
import timeit
5 cũng có đối số import timeit
4:>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
Những khác biệt này là quá nhỏ để có ý nghĩa.
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
import timeit
7import timeit
8 import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
1>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
3__lambda [arguments] : [expression]2
lambda [arguments] : [expression]3
lambda [arguments] : [expression]4
import timeit
8 import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
1>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2lambda [arguments] : [expression]2
9 28
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
9 29
import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 112
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2 114
lambda [arguments] : [expression]2
import timeit
9117
import timeit
99 29
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]0
import timeit
7import timeit
8 9 29
import timeit
9[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]5
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]7
lambda [arguments] : [expression]1
lambda [arguments] : [expression]2
lambda [arguments] : [expression]3
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
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]1
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]2
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]5
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]6
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8Các
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
21import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
23>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
24import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
26lambda [arguments] : [expression]2
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
28
- Output:
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
Python3
Các
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
21import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
23>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
24import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
26lambda [arguments] : [expression]2
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
63- Output:
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
52>>> type[a] >>> type[b] >>> import dis >>> dis.dis[a] 2 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE >>> dis.dis[b] 1 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE
8import timeit
23>>> type[a] >>> type[b] >>> import dis >>> dis.dis[a] 2 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE >>> dis.dis[b] 1 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE
24>>> type[a] >>> type[b] >>> import dis >>> dis.dis[a] 2 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE >>> dis.dis[b] 1 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE
8import timeit
0>>> min[timeit.repeat[a, repeat=100]] 0.06456905393861234 >>> min[timeit.repeat[b, repeat=100]] 0.06374448095448315
58__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,>>> type[a] >>> type[b] >>> import dis >>> dis.dis[a] 2 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE >>> dis.dis[b] 1 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE
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;
Các
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
87import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
89import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
92___lambda [arguments] : [expression]2
import timeit
9>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
97>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
98>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
99import timeit
8 import timeit
01import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 import timeit
04import timeit
05 [lambda x, y: x + y][1, 2]1
[lambda x, y: x + y][1, 2]8
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]6
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8lambda [arguments] : [expression]2
import timeit
9>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
97import timeit
21& 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;
Pros and Cons of lambda functions :
Pros of lambda functions:
- 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.
- 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;
Python3
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]1
import timeit
23[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]5
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4114
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2import timeit
30import timeit
31import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
6import timeit
34import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8import timeit
37import timeit
8 lambda [arguments] : [expression]0
import timeit
40import timeit
8 import timeit
42lambda [arguments] : [expression]2
import timeit
44- Output:
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
0Python3
import timeit
40import timeit
8 import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 import timeit
49>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4______lambda [arguments] : [expression]2
import timeit
61- Output:
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
0Nhượ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
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]1
import timeit
63[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[lambda x, y: x + y][1, 2]1
import timeit
66import timeit
8import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
6import timeit
70import timeit
71[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
import timeit
73[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[lambda x, y: x + y][1, 2]7
[lambda x, y: x + y][1, 2]1
import timeit
66import timeit
8import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8import timeit
70import timeit
71[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
import timeit
84[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[lambda x, y: x + y][1, 2]7
[lambda x, y: x + y][1, 2]1
import timeit
66import timeit
8import timeit
8 lambda [arguments] : [expression]0
import timeit
70import timeit
71[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
import timeit
95[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]3
[lambda x, y: x + y][1, 2]7
import timeit
70import timeit
71[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
01>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
02import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
04lambda [arguments] : [expression]0
lambda [arguments] : [expression]1
lambda [arguments] : [expression]2
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
08- Output:
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
2Python3
Is
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
28[lambda x, y: x + y][1, 2]7
import timeit
9import timeit
95 [lambda x, y: x + y][1, 2]1
import timeit
66__lambda [arguments] : [expression]2
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
08- Output:
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
2& 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.
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
4- Thay vào đó, nên viết một chức năng một lớp lót như,
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
5- 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
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
44import timeit
8 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
47>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
49>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2 import timeit
30lambda [arguments] : [expression]2
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
53[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]1
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
55[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]4
import timeit
66>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4 >>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
49>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
2 import timeit
30lambda [arguments] : [expression]2
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
53- 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.
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
6- 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à,
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
7- 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.
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
8- 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.
>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
9- 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
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
64___>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
83>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
84>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
67import timeit
70>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
87>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
71import timeit
70>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
91>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
75import timeit
70>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
6>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
79import timeit
70>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
11>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
82>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
83>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
84>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
67import timeit
70lambda [arguments] : [expression]05
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
71import timeit
70lambda [arguments] : [expression]09
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
75import timeit
70>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
11>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
79import timeit
70>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8lambda [arguments] : [expression]18
lambda [arguments] : [expression]19
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
23lambda [arguments] : [expression]22
lambda [arguments] : [expression]23
lambda [arguments] : [expression]24
import timeit
8>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 lambda [arguments] : [expression]27____367__
lambda [arguments] : [expression]38
lambda [arguments] : [expression]34
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
75lambda [arguments] : [expression]41
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4lambda [arguments] : [expression]44
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
75>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
20>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
4lambda [arguments] : [expression]34
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
79lambda [arguments] : [expression]50
lambda [arguments] : [expression]2
lambda [arguments] : [expression]52
- 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
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
64___>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
83>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
84___>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
83>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
84>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
67import timeit
70lambda [arguments] : [expression]05
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
71import timeit
70lambda [arguments] : [expression]09
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
75import timeit
70>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
11>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
79import timeit
70>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8lambda [arguments] : [expression]18
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]1
[lambda x, y: x + y][1, 2]09
E
lambda [arguments] : [expression]19
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
23[lambda x, y: x + y][1, 2]38
import timeit
8[lambda x, y: x + y][1, 2]40
lambda [arguments] : [expression]2
lambda [arguments] : [expression]52
- 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.
import timeit
0- 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
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]8
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
00[lambda x, y: x + y][1, 2]55
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
6>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7__[lambda x, y: x + y][1, 2]58
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
89import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
92___[lambda x, y: x + y][1, 2]66
import timeit
8 import timeit
01import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
92lambda [arguments] : [expression]2
import timeit
9>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
97[lambda x, y: x + y][1, 2]78
lambda [arguments] : [expression]2
import timeit
9>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
97[lambda x, y: x + y][1, 2]82
- 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
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]8
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
00[lambda x, y: x + y][1, 2]55
>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
6>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
8>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
7__[lambda x, y: x + y][1, 2]58
import timeit
8 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
89import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
92___[lambda x, y: x + y][1, 2]66
import timeit
8 import timeit
01import timeit
9>>> min[timeit.repeat[a, repeat=100]]
0.06456905393861234
>>> min[timeit.repeat[b, repeat=100]]
0.06374448095448315
0 >>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
92lambda [arguments] : [expression]2
import timeit
9>>> type[a]
>>> type[b]
>>> import dis
>>> dis.dis[a]
2 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
>>> dis.dis[b]
1 0 LOAD_CONST 3 [73926]
2 RETURN_VALUE
97[lambda x, y: x + y][1, 2]78
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ự.
[lambda x, y: x + y][1, 2]
58
8import timeit
[lambda x, y: x + y][1, 2]
8__
- Is 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[]
import timeit
1lambda [arguments] : [expression]
2
9import timeit
97>>> type[a] >>> type[b] >>> import dis >>> dis.dis[a] 2 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE >>> dis.dis[b] 1 0 LOAD_CONST 3 [73926] 2 RETURN_VALUE
[lambda x, y: x + y][1, 2]
82
import timeit
2- 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;