Hàm Def lambda trong Python là gì?

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áp

Nó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ã

lambda argument(s): expression

Hà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

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
5 phải đứng đầu. Dấu hai chấm đầy đủ (. ) ngăn cách đối số và biểu thức

Trong mã ví dụ bên dưới, x là đối số và x+x là biểu thức

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x

Trướ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

  • Tốt cho các hoạt động logic đơn giản, dễ hiểu. Điều này cũng làm cho mã dễ đọc hơn
  • Tốt khi bạn muốn một chức năng mà bạn sẽ chỉ sử dụng một lần

Nhược điểm

  • Họ chỉ có thể thực hiện một biểu thức. Không thể có nhiều thao tác độc lập trong một hàm lambda
  • Không phù hợp với các hoạt động kéo dài nhiều hơn một dòng trong một hàm
    #Normal python function
    def a_name(x):
    return x+x
    #Lambda function
    lambda x: x+x
    6 bình thường (Ví dụ: các hoạt động có điều kiện lồng nhau). Nếu bạn cần một hoặc hai phút để hiểu mã, thay vào đó hãy sử dụng hàm có tên
  • Không tốt vì bạn không thể viết một chuỗi tài liệu để giải thích tất cả các đầu vào, hoạt động và đầu ra như bạn làm trong một hàm
    #Normal python function
    def a_name(x):
    return x+x
    #Lambda function
    lambda x: x+x
    6 bình thường

Ở 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ị

(lambda x: x*2)(12)###Results
24

Trong đ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ách

Lọ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à

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
8. 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 _______1_______9 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ị

________số 8_______

Bản đồ(). Đây là một thư viện python có sẵn khác với cú pháp

(lambda x: x*2)(12)###Results
24
0

Đ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

list_1 = [1,2,3,4,5,6,7,8,9]
cubed = map(lambda x: pow(x,3), list_1)
list(cubed)
###Results
[1, 8, 27, 64, 125, 216, 343, 512, 729]

3. đối tượng sê-ri

A 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

import pandas as pddf = pd.DataFrame({
'Name': ['Luke','Gina','Sam','Emma'],
'Status': ['Father', 'Mother', 'Son', 'Daughter'],
'Birthyear': [1976, 1984, 2013, 2016],
})

Lambda 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à

(lambda x: x*2)(12)###Results
24
1

df['age'] = df['Birthyear'].apply(lambda x: 2021-x)

Lambda 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

list(filter(lambda x: x>18, df['age']))###Results
[45, 37]

Lambda 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

#Double the age of everyonedf['double_age'] = 
df['age'].map(lambda x: x*2)

Chú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

(lambda x: x*2)(12)###Results
24
2 và
(lambda x: x*2)(12)###Results
24
3 có thể hoán đổi cho nhau trong ngữ cảnh này

#Conditional Lambda statementdf['Gender'] = df['Status'].map(lambda x: 'Male' if x=='father' or x=='son' else 'Female')

4. Lambda trên đối tượng Dataframe

Tô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

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
0

Trong 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

(lambda x: x*2)(12)###Results
24
4 ở đây để biểu thức được áp dụng theo cột

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
1

Trường hợp sử dụng không được khuyến khích

  1. Gán tên cho hàm Lambda. Điều này không được khuyến khích trong hướng dẫn kiểu python PEP8 vì Lambda tạo một chức năng ẩn danh không có nghĩa là được lưu trữ. Thay vào đó, hãy sử dụng hàm
    #Normal python function
    def a_name(x):
    return x+x
    #Lambda function
    lambda x: x+x
    6 bình thường nếu bạn muốn lưu trữ hàm để sử dụng lại
#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
2

2. Truyền hàm bên trong hàm Lambda. Việc sử dụng các hàm như

(lambda x: x*2)(12)###Results
24
6 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()

#Normal python function
def a_name(x):
return x+x
#Lambda function
lambda x: x+x
3

Lý 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à

(lambda x: x*2)(12)###Results
24
7 và
(lambda x: x*2)(12)###Results
24
8 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ày

3. 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

#Conditional Lambda statementdf['Gender'] = df['Status'].map(lambda x: 'Male' if x=='father' or x=='son' else 'Female')

Kế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ận

Nhiề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 dễ hiểu hơn, hàm tích hợp và thư viện chuẩ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

Def so với lambda Python là gì?

Trong python, các hàm được xác định def thường được sử dụng vì tính đơn giản của chúng. Các hàm được xác định def không trả về bất kỳ thứ gì nếu không được trả về một cách rõ ràng trong khi hàm lambda trả về một đối tượng . Các chức năng def phải được khai báo trong không gian tên.

Hàm def trong Python là gì?

Từ khóa Python def được dùng để định nghĩa một hàm , nó được đặt trước tên hàm do người dùng cung cấp để tạo người dùng . Trong python, một hàm là một đơn vị mã logic chứa một chuỗi các câu lệnh được thụt vào dưới một tên được đặt bằng từ khóa “def”.

Các hàm lambda được sử dụng cho Python là gì?

Hàm Lambda thường được sử dụng với hàm bậc cao hơn, lấy một hoặc nhiều hàm làm đối số hoặc trả về một hoặc nhiều hàm . Python hiển thị các hàm bậc cao hơn dưới dạng các hàm tích hợp sẵn hoặc trong thư viện chuẩn. Ví dụ bao gồm map() , filter() , funcools.

Hàm lambda có yêu cầu từ khóa def không?

Từ khóa lambda được sử dụng để định nghĩa các hàm ẩn danh, nghĩa là các hàm không có tên. Các hàm lambda Python không khác nhiều so với các hàm thông thường được xác định bằng từ khóa def . Đây là một ví dụ về Lambda trong Python. Nếu chúng ta thực thi dòng mã trên, đầu ra sẽ là 10.