Trong Python, chúng ta có thể đánh giá trực tiếp biểu thức toán học, vậy tại sao chúng ta đang sử dụng hàm Lambda? Và câu hỏi của tôi là lợi thế của việc sử dụng chức năng Lambda trong Python là gì. Ví dụ:
Nếu chúng ta muốn đánh giá biểu thức trong Python bằng cách sử dụng mà không có chức năng Lambda như thế này -
a=10
b=20
c=a+b
print[c]
output:30
Và nếu chúng ta muốn đánh giá biểu thức tương tự trong Python bằng cách sử dụng hàm Lambda, một cái gì đó như thế này -
c=lambda a,b:a+b
print[c[10,20]]
output:30
Vui lòng giải thích cho tôi lợi thế của việc sử dụng chức năng Lambda trong Python.
wjandrea
25.1k8 Huy hiệu vàng53 Huy hiệu bạc73 Huy hiệu đồng8 gold badges53 silver badges73 bronze badges
hỏi ngày 16 tháng 10 năm 2021 lúc 20:05Oct 16, 2021 at 20:05
8
Một biểu thức Lambda xác định một hàm; Ưu điểm so với tuyên bố
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4 là bạn không cần phải viết tên cho nó.Một trường hợp sử dụng là khi bạn gửi một chức năng là đại biểu và chức năng của bạn rất đơn giản, bạn không cần phải mã hóa nó dưới dạng hàm
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4:numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
Biểu thức lambda đánh giá một hàm; Bạn có thể gán nó cho một biến, nhưng PEP8 khuyên bạn nên sử dụng
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4:Luôn sử dụng câu lệnh DEF thay vì câu lệnh gán liên kết biểu thức Lambda trực tiếp với định danh:
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
Chepner
464K68 Huy hiệu vàng488 Huy hiệu bạc631 Huy hiệu Đồng68 gold badges488 silver badges631 bronze badges
Đã trả lời ngày 16 tháng 10 năm 2021 lúc 20:13Oct 16, 2021 at 20:13
Dani Herreradani Herreradani herrera
46.2K7 Huy hiệu vàng112 Huy hiệu bạc171 Huy hiệu đồng7 gold badges112 silver badges171 bronze badges
0
Các hàm Lambda rất quan trọng trong bối cảnh lập trình chức năng, tương tác chủ yếu với các giao diện như
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
7, # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
8, v.v.Lấy
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
8 làm ví dụ kinh điển, một trong những đối số của nó [cái đầu tiên] là một hàm. Trong các trường hợp đơn giản, khi chức năng sẽ không được tái sử dụng, việc viết là khá thiết thựcmap[lambda x: ..., [...]]
thay vì đối tác
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4 của nódef f[x]:
...
map[f, [...]]
Đã trả lời ngày 16 tháng 10 năm 2021 lúc 20:12Oct 16, 2021 at 20:12
PedropedroPedro
1.0467 Huy hiệu bạc15 Huy hiệu Đồng7 silver badges15 bronze badges
2
Từ khóa Lambda trong Python cung cấp một lối tắt để khai báo các chức năng ẩn danh nhỏ. Các chức năng Lambda hoạt động giống như các chức năng thông thường được khai báo với từ khóa DEF. Chúng có thể được sử dụng bất cứ khi nào các đối tượng chức năng được yêu cầu.
Chức năng Lambda, còn được gọi là chức năng ẩn danh, giống như hàm python thông thường nhưng có thể được xác định mà không có tên.
1. Hàm Lambda trong Python là gì?
Chức năng Lambda, còn được gọi là chức năng ẩn danh, giống như hàm python thông thường nhưng có thể được xác định mà không có tên. Mặc dù các hàm bình thường được xác định bằng cách sử dụng từ khóa # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4, các hàm ẩn danh được xác định bằng cách sử dụng từ khóa map[lambda x: ..., [...]]
2. Tuy nhiên, chúng bị giới hạn trong một dòng biểu thức duy nhất. Họ có thể lấy các tham số mutliple như trong các chức năng thông thường.
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
map[lambda x: ..., [...]]
2. Cú pháp chức năng Lambda
Cú pháp cho hàm map[lambda x: ..., [...]]
2 được đưa ra bởi: map[lambda x: ..., [...]]
4 Thông báo, có thể có bất kỳ số lượng đối số nào nhưng chỉ có thể chứa một biểu thức duy nhất. Không có tuyên bố map[lambda x: ..., [...]]
5 thường có trong cú pháp hàm # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4. Hàm & nbsp; sẽ chỉ đơn giản trả về giá trị biểu thức ngay cả khi không có câu lệnh map[lambda x: ..., [...]]
5.
map[lambda x: ..., [...]]
map[lambda x: ..., [...]]
map[lambda x: ..., [...]]
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
map[lambda x: ..., [...]]
- Nội dung
- Chức năng Lambda trong Python là gì?
- Cú pháp chức năng Lambda
- Cần các chức năng Lambda
- Cách sử dụng các hàm Lambda: Ví dụ đơn giản
- Trong nội bộ, cả hai chức năng Lambda và def đều hoạt động giống hệt nhau
- Các hàm Lambda có thể có biểu thức 0 hoặc 1, không nhiều hơn.
- Các chức năng Lambda có thể được gọi ngay lập tức
- Có thể viết các chức năng thứ tự cao hơn bằng Lambda
- Các hàm Lambda chấp nhận tất cả các loại đối số, giống như hàm def bình thường
- Bạn có thể sử dụng hàm
2 trongmap[lambda x: ..., [...]]
1def f[x]: ... map[f, [...]]
- Bạn cũng có thể sử dụng chức năng ____42 trong
3def f[x]: ... map[f, [...]]
- Cách sử dụng chức năng Lambda để thao tác với DataFrame
- Sự kết luận
3. Cần các chức năng Lambda
Có ít nhất 3 lý do:
- Các hàm Lambda Giảm số lượng dòng mã khi so sánh với hàm Python bình thường được xác định bằng cách sử dụng từ khóa
4. Nhưng điều này không chính xác bởi vì, ngay cả các hàm được xác định với# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
4 cũng có thể được xác định trong một dòng. Nhưng nói chung, các hàm# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
4 được viết theo hơn 1 dòng.# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
- Chúng thường được sử dụng khi cần một hàm tạm thời trong một khoảng thời gian ngắn, thường được sử dụng bên trong một chức năng khác như
7,# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
8 và# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
9.,def f[x]: ... map[f, [...]]
8 and# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
9.def f[x]: ... map[f, [...]]
- Sử dụng chức năng Lambda, bạn có thể xác định một hàm và gọi nó ngay lập tức vào cuối định nghĩa. Điều này có thể được thực hiện với các chức năng
4. functions.# Correct: def f[x]: return 2*x # Wrong: f = lambda x: 2*x
- Các hàm Lambda Giảm số lượng dòng mã khi so sánh với hàm Python bình thường được xác định bằng cách sử dụng từ khóa
Hãy cùng xem thêm về việc thực hiện chúng trong Python.
4. Cách sử dụng các hàm Lambda: Ví dụ đơn giản
Bạn không cần chỉ định tên cho hàm như đã thảo luận ở trên về cú pháp của hàm
map[lambda x: ..., [...]]
2. Hãy để cố gắng xác định một hàm để tính toán các bình phương của các giá trị đã cho.# calculate squares using lambda
squares = lambda x: x*x
print['Using lambda: ', squares[5]]
Using lambda: 25
Chúng ta cũng hãy nhìn vào cách thực hiện cùng một chức năng bằng cách sử dụng từ khóa
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4 và so sánh chúng.# calculate squares using def
def squares_def[x]:
return x*x
print['Using def: ', squares_def[5]]
Output:
Using def: 25
Làm tương tự trong một dòng duy nhất.
c=lambda a,b:a+b
print[c[10,20]]
0Using def: 25
Xem rằng trong khi sử dụng từ khóa
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4, chúng tôi sẽ trả về một giá trị nhất định # calculate squares using lambda
squares = lambda x: x*x
print['Using lambda: ', squares[5]]
4. Trong trường hợp hàm map[lambda x: ..., [...]]
2, biểu thức # calculate squares using lambda
squares = lambda x: x*x
print['Using lambda: ', squares[5]]
4 sẽ được trả về mà không viết một câu lệnh trả về rõ ràng. Nói chung trong sử dụng bình thường, không có nhiều sự khác biệt trong việc sử dụng từ khóa # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4 và map[lambda x: ..., [...]]
2. Cả hai đều là chức năng thực tế. Hãy cùng xem các loại của họ.c=lambda a,b:a+b
print[c[10,20]]
2c=lambda a,b:a+b
print[c[10,20]]
3Cả hai đều thuộc lớp
# calculate squares using lambda
squares = lambda x: x*x
print['Using lambda: ', squares[5]]
9.5. Trong nội bộ, cả hai hàm Lambda và def đều hoạt động chính xác
Để kiểm tra cách chúng hoạt động trong nội bộ, hãy sử dụng từ khóa
Using lambda: 25
0. Using lambda: 25
0 Từ khóa sẽ hiển thị một phiên bản có thể đọc của mã Bytepy Python cho phép kiểm tra các hướng dẫn.c=lambda a,b:a+b
print[c[10,20]]
4c=lambda a,b:a+b
print[c[10,20]]
5Bytecode cho hàm `def` thông thường.
c=lambda a,b:a+b
print[c[10,20]]
6c=lambda a,b:a+b
print[c[10,20]]
5Xem rằng quá trình được thực hiện bởi cả hai chức năng là giống hệt nhau. Vì vậy, không có sự khác biệt thực sự trong cách họ thực hiện. & nbsp;
6. Các hàm Lambda có thể có biểu thức 0 hoặc 1, không nhiều hơn.
- Không có biểu thức: Không chứa biểu thức, sẽ đưa ra cùng một đầu ra cho tất cả các đối số.
c=lambda a,b:a+b
print[c[10,20]]
8Output:
Nhận khóa học Python hoàn thành miễn phí
Đối mặt với tình huống tương tự như mọi người khác?
Xây dựng sự nghiệp khoa học dữ liệu của bạn với trình độ được công nhận trên toàn cầu, được công nghiệp phê duyệt. Có được suy nghĩ, sự tự tin và các kỹ năng làm cho nhà khoa học dữ liệu trở nên có giá trị.
Nhận khóa học Python hoàn thành miễn phí
Xây dựng sự nghiệp khoa học dữ liệu của bạn với trình độ được công nhận trên toàn cầu, được công nghiệp phê duyệt. Có được suy nghĩ, sự tự tin và các kỹ năng làm cho nhà khoa học dữ liệu trở nên có giá trị.
c=lambda a,b:a+b
print[c[10,20]]
9- Biểu thức đơn: Chúng có thể chứa một biểu thức hoặc không có biểu thức. Chúng ta không thể đặt nhiều hơn một biểu thức trong hàm Lambda.
numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
0numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
17. Các chức năng Lambda có thể được gọi ngay lập tức
Bạn có thể triển khai chức năng Lambda mà không cần sử dụng tên biến. Bạn cũng có thể trực tiếp chuyển các giá trị đối số vào hàm
map[lambda x: ..., [...]]
2 ngay sau khi xác định nó bằng cách sử dụng paranthesis. Điều này không thể được thực hiện bằng cách sử dụng các hàm # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4.numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
2Điều này không hoạt động với chức năng
# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4.numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
38. Có thể viết các chức năng thứ tự cao hơn bằng Lambda
Một hàm Lambda có thể lấy một chức năng khác làm đối số. Hãy cùng xem xét một ví dụ về các chức năng Lambda lồng nhau, hàm Lambda bên trong một chức năng Lambda khác.
numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
4Xem rằng tôi đã vượt qua một hàm Lambda khác để tính toán hình vuông làm đối số cho biến
Using lambda: 25
5.9. Chức năng Lambda Chấp nhận tất cả các loại đối số, giống như hàm def bình thường
Hàm
map[lambda x: ..., [...]]
2 hỗ trợ tất cả các loại đối số giống như hàm # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
4 bình thường. 1. Đối số từ khóa: Using lambda: 25
8 là một đối số trước một định danh [ví dụ: tên =] trong một cuộc gọi hàm. Đối số được đặt tên: Ví dụ1. Keyword Arguments: Using lambda: 25
8 is an argument preceded by an identifier [e.g. name=] in a function call. Named Arguments:
Examplenumbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
5Danh sách biến các đối số: Ví dụ
numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
6Danh sách biến các đối số từ khóa: Ví dụ
numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
72. Đối số vị trí:
9 là một đối số không phải là đối số từ khóa. Using lambda: 25
Using lambda: 25
9 is an argument that is not a keyword argument.numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
810. Bạn có thể sử dụng hàm map[lambda x: ..., [...]]
2 trong map[lambda x: ..., [...]]
9
map[lambda x: ..., [...]]
map[lambda x: ..., [...]]
Hàm
map[lambda x: ..., [...]]
9 được sử dụng để lọc một số không thể sử dụng [danh sách như đối tượng] bằng cách sử dụng một hàm khác xác định logic lọc. Hàm Lambda thường được sử dụng để xác định logic lọc và được truyền là đối số đầu tiên của map[lambda x: ..., [...]]
9. Một đối tượng danh sách giống như có thể được chuyển làm đối số thứ hai cho hàm # Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
7.numbers = [1,2,3,4]
numbers.sort[key=lambda n: n % 10] # sort uses lambda function
911. Bạn có thể sử dụng hàm map[lambda x: ..., [...]]
2 trong def f[x]:
...
map[f, [...]]
1
map[lambda x: ..., [...]]
def f[x]:
...
map[f, [...]]
Hàm
def f[x]:
...
map[f, [...]]
1 áp dụng một hàm đã cho cho tất cả các ITME trong danh sách và trả về kết quả. Tương tự như map[lambda x: ..., [...]]
9, chỉ cần chuyển chức năng Lambda và danh sách [hoặc bất kỳ sự khác biệt nào, như tuple] làm đối số.# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
012. Bạn cũng có thể sử dụng hàm map[lambda x: ..., [...]]
2 trong def f[x]:
...
map[f, [...]]
3
map[lambda x: ..., [...]]
def f[x]:
...
map[f, [...]]
Hàm
def f[x]:
...
map[f, [...]]
3 thực hiện hoạt động lặp đi lặp lại trên các cặp phần tử trong danh sách. Truyền hàm map[lambda x: ..., [...]]
2 và danh sách làm đối số cho hàm def f[x]:
...
map[f, [...]]
3. Để sử dụng chức năng def f[x]:
...
map[f, [...]]
3, bạn cần nhập def f[x]:
...
map[f, [...]]
9 từ Using def: 25
6 Librray.# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
1Xem rằng hàm
def f[x]:
...
map[f, [...]]
3 lặp lại nhân lên trên các phần tử trong danh sách. Using def: 25
8 và như vậy.13. Cách sử dụng chức năng Lambda để thao tác với DataFrame
Bạn cũng có thể thao tác các cột của DataFrame bằng hàm
map[lambda x: ..., [...]]
2. Nó là một ứng cử viên tuyệt vời để sử dụng bên trong phương thức c=lambda a,b:a+b
print[c[10,20]]
00 của DataFrame. Tôi sẽ cố gắng thêm một hàng mới trong DataFrame trong phần này làm ví dụ.# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
2
1 | 2 | 3 | 6 |
4 | 5 | 6 | 120 |
Khi được sử dụng với
c=lambda a,b:a+b
print[c[10,20]]
01, nó áp dụng chức năng Lambda cho mọi yếu tố của DataFrame.# Correct:
def f[x]: return 2*x
# Wrong:
f = lambda x: 2*x
3
1 | 4 | 9 | 36 |
16 | 25 | 36 | 14400 |
Khi được sử dụng với c=lambda a,b:a+b
print[c[10,20]]
01, nó áp dụng chức năng Lambda cho mọi yếu tố của DataFrame.
c=lambda a,b:a+b
print[c[10,20]]
Sự kết luận
- Hy vọng bạn rõ ràng với các chức năng Lambda là gì và làm thế nào bạn có thể sử dụng nó trong các tình huống khác nhau. Hãy thử các bài tập sau để kiểm tra sự hiểu biết của bạn:
- Tính toán giai thừa của 10 bằng chức năng Lambda. Gợi ý: Sử dụng
9.def f[x]: ... map[f, [...]]