Chuyển đổi lambda thành python chức năng bình thường
Chúng tôi sử dụng từ khóa 0 thay vì def để tạo hàm lambda. Đây là cú pháp để khai báo hàm lambda Show
Nơi đây,
Hãy xem một ví dụ,
Ở đây, chúng ta đã định nghĩa một hàm lambda và gán nó cho biến có tên là hello Để thực thi hàm lambda này, chúng ta cần gọi nó. Đây là cách chúng ta có thể gọi hàm lambda
Hàm lambda ở trên chỉ cần in văn bản 4Ghi chú. Hàm lambda này không có bất kỳ đối số nào Thí dụ. Hàm lambda trong Python
Trong ví dụ trên, chúng ta đã định nghĩa một hàm lambda và gán nó cho biến hello Khi chúng ta gọi hàm lambda, câu lệnh 4 bên trong hàm lambda được thực thiHàm lambda Python với một đối sốTương tự như các hàm bình thường, hàm 0 cũng có thể chấp nhận các đối số. Ví dụ,
Trong ví dụ trên, chúng ta đã gán hàm lambda cho biến hello_user Ở đây, 6 sau từ khóa 0 chỉ định rằng hàm lambda chấp nhận đối số có tên 6Lưu ý cuộc gọi của hàm lambda, 3Ở đây, chúng tôi đã chuyển một giá trị chuỗi 9 cho hàm lambda của chúng tôiVà cuối cùng, câu lệnh bên trong hàm lambda được thực thi Các câu hỏi thường gặpHàm filter() trong Python nhận một hàm và một iterable (danh sách, bộ dữ liệu và chuỗi) làm đối số Hàm được gọi với tất cả các mục trong danh sách và một danh sách mới được trả về chứa các mục được hàm đó trả về cho mỗi mục Khi tôi lần đầu tiên bắt gặp các hàm lambda trong python, tôi đã rất lo lắng và nghĩ rằng chúng dành cho Pythonistas nâng cao. Hướng dẫn về python cho người mới bắt đầu hoan nghênh ngôn ngữ này vì cú pháp dễ đọc của nó, nhưng chắc chắn lambdas có vẻ không thân thiện với người dùng Tuy nhiên, khi tôi đã hiểu cú pháp chung và kiểm tra một số trường hợp sử dụng đơn giản, việc sử dụng chúng sẽ bớt đáng sợ hơn cú phápNói một cách đơn giản, hàm lambda cũng giống như bất kỳ hàm python bình thường nào, ngoại trừ việc nó không có tên khi định nghĩa và nó được chứa trong một dòng mã 5Hàm lambda đánh giá một biểu thức cho một đối số đã cho. Bạn cung cấp cho hàm một giá trị (đối số) và sau đó cung cấp thao tác (biểu thức). Từ khóa 65 phải đứng đầu. Dấu hai chấm đầy đủ (. ) ngăn cách đối số và biểu thứcTrong mã ví dụ bên dưới, x là đối số và x+x là biểu thức 6Trước khi chúng ta đi vào các ứng dụng thực tế, hãy đề cập đến một số kỹ thuật về những gì cộng đồng python nghĩ là tốt và xấu với các hàm lambda ưu
Nhược điểm
Ở cuối bài viết này, chúng ta sẽ xem xét các ví dụ về mã thường được sử dụng trong đó hàm Lambda không được khuyến khích mặc dù chúng có vẻ hợp pháp Nhưng trước tiên, hãy xem xét các tình huống khi sử dụng hàm lambda. Lưu ý rằng chúng tôi sử dụng các hàm lambda rất nhiều với các lớp python nhận một hàm làm đối số, ví dụ: map() và filter(). Chúng còn được gọi là các hàm bậc cao hơn 1. giá trị vô hướngĐây là khi bạn thực thi hàm lambda trên một giá trị 0Trong đoạn mã trên, hàm đã được tạo và sau đó được thực thi ngay lập tức. Đây là một ví dụ về biểu thức hàm được gọi ngay lập tức hoặc IIFE 2. danh sáchLọc(). Đây là thư viện sẵn có của Python chỉ trả về những giá trị phù hợp với tiêu chí nhất định. Cú pháp là 68. Iterable có thể là bất kỳ trình tự nào, chẳng hạn như đối tượng danh sách, tập hợp hoặc chuỗi (thêm bên dưới)Ví dụ bên dưới lọc danh sách cho 69 số. Lưu ý rằng hàm bộ lọc trả về một ‘Đối tượng bộ lọc’ và bạn cần đóng gói nó bằng một danh sách để trả về các giá trị 3Bản đồ(). Đây là một thư viện python có sẵn khác với cú pháp 00Điều này trả về một danh sách đã sửa đổi trong đó mọi giá trị trong danh sách ban đầu đã được thay đổi dựa trên một hàm. Ví dụ dưới đây chia khối mọi số trong danh sách 53. đối tượng sê-riA là một cột trong khung dữ liệu, hay nói cách khác, một chuỗi các giá trị với các chỉ số tương ứng. Các hàm lambda có thể được sử dụng để thao tác các giá trị bên trong khung dữ liệu Pandas Hãy tạo một khung dữ liệu giả về các thành viên trong một gia đình 6Lambda với hàm Apply() của Pandas. Hàm này áp dụng một thao tác cho mọi phần tử của cột Để biết tuổi hiện tại của mỗi thành viên, chúng ta lấy năm hiện tại trừ đi năm sinh của họ. Trong hàm lambda bên dưới, x tham chiếu đến một giá trị trong cột năm sinh và biểu thức là 01 8Lambda với hàm Filter() của Python. Điều này có 2 đối số; . Nó trả về một danh sách các giá trị thỏa mãn điều kiện 9Lambda với hàm Map() của Pandas. Map hoạt động rất giống với apply() ở chỗ nó sửa đổi các giá trị của một cột dựa trên biểu thức 0Chúng tôi cũng có thể thực hiện các hoạt động có điều kiện trả về các giá trị khác nhau dựa trên các tiêu chí nhất định Mã bên dưới trả về 'Nam' nếu giá trị Trạng thái là cha hoặc con và trả về 'Nữ' nếu không. Lưu ý rằng 02 và 03 có thể hoán đổi cho nhau trong ngữ cảnh này 34. Lambda trên đối tượng DataframeTôi chủ yếu sử dụng các hàm Lambda trên các cột cụ thể (đối tượng chuỗi) thay vì toàn bộ khung dữ liệu, trừ khi tôi muốn sửa đổi toàn bộ khung dữ liệu bằng một biểu thức Ví dụ: làm tròn tất cả các giá trị đến 1 chữ số thập phân, trong trường hợp đó, tất cả các cột phải là kiểu dữ liệu float hoặc int vì round() không thể hoạt động trên chuỗi 60Trong ví dụ dưới đây, chúng tôi sử dụng áp dụng trên khung dữ liệu và chọn các cột để sửa đổi trong hàm Lambda. Lưu ý rằng chúng ta phải sử dụng 04 ở đây để biểu thức được áp dụng theo cột 61Trường hợp sử dụng không được khuyến khích
622. Truyền hàm bên trong hàm Lambda. Việc sử dụng các hàm như 06 chỉ nhận một đối số số là không cần thiết với Lambda vì bạn có thể chuyển trực tiếp hàm vào map() hoặc apply() 63Lý tưởng nhất là các hàm bên trong các hàm lambda nên có hai đối số trở lên. Ví dụ là 07 và 08 Bạn có thể thử nghiệm với nhiều hàm python tích hợp khác nhau để xem hàm nào cần hàm Lambda trong ngữ cảnh này. Tôi đã làm như vậy trong sổ ghi chép này3. Sử dụng các hàm Lambda khi nhiều dòng mã dễ đọc hơn. Một ví dụ là khi bạn đang sử dụng câu lệnh if-else bên trong hàm lambda. Tôi đã sử dụng ví dụ dưới đây trước đó trong bài viết này 3Kết quả tương tự có thể đạt được với mã dưới đây. Tôi thích cách này hơn vì bạn có thể có vô số điều kiện và mã đủ đơn giản để làm theo. Thông tin thêm về các điều kiện vector hóa tại đây Phần kết luậnNhiều lập trình viên không thích Lambdas thường lập luận rằng bạn có thể thay thế chúng bằng cách hiểu danh sách, hàm tích hợp và thư viện chuẩn dễ hiểu hơn. Các biểu thức trình tạo (tương tự như hiểu danh sách) cũng là các lựa chọn thay thế hữu ích cho các hàm map() và filter() Cho dù bạn có quyết định sử dụng các hàm Lambda trong mã của mình hay không, bạn cần hiểu chúng là gì và chúng được sử dụng như thế nào vì chắc chắn bạn sẽ bắt gặp chúng trong mã của người khác Tôi có thể sử dụng cái gì thay vì lambda?Một trong những lựa chọn thay thế tốt cho hàm lambda là khả năng hiểu danh sách . Đối với map() , filter() và reduce() , tất cả chúng đều có thể được thực hiện bằng cách sử dụng khả năng hiểu danh sách. Khả năng hiểu danh sách là một giải pháp giữa hàm for-loop và hàm lambda thông thường.
Lambdas có thể trả về giá trị không?Trả về giá trị từ biểu thức lambda
. You can explicitly return a value from the lambda using the qualified return syntax.
Tại sao các hàm lambda không được ưu tiên hơn so với các hàm thông thường?Hạn chế. các hàm lambda chỉ có thể được sử dụng một lần, trừ khi được gán cho một tên biến . Hàm lambda được gán cho tên biến không có lợi thế hơn hàm def. hàm lambda có thể khó hoặc không thể chọn.
Bạn có thể chọn chức năng lambda không?Các hàm được chọn theo tên, không phải theo mã . Unpickling sẽ chỉ hoạt động nếu một hàm có cùng tên xuất hiện trong cùng một mô-đun (__main__ trong ví dụ của bạn) Đây là lý do tại sao việc pickling lambda sẽ không hoạt động. họ không có tên cá nhân. |