Các hàm Python trật tự cao hơn (phần 6)

Sử dụng lambda để tạo các hàm nặc danh

Mặc dù việc sử dụng các hàm trật tự cao hơn có thể đơn giản hóa code, nó là chừng mực nào đó khó khăn để phải định
nghĩa các hàm mới để cung cấp như các đối số tới các hàm trật tự cao hơn. Ví dụ, các hàm add và multiply sẽ không
bao giờ được sử dụng bất cứ nơi nào khác trong một chương trình, vì các toán tử + và * đã là có sẵn. Nó sẽ là thuận
tiện nếu chúng ta có thể định nghĩa một hàm khi đang hoạt động, ngay tại điểm của lời gọi của một hàm trật tự cao
hơn, đặc biệt nếu nó không được cần bất cứ nơi nào khác.
Python bao gồm một cơ chế gọi là lambda cái cho phép lập trình viên tạo các hàm theo phong cách này. Một lambda
là một hàm nặc danh. Nó không có tên bản thân nó, nhưng nó chứa các tên của các đối số của nó cũng như một biểu thức
đơn. Khi lambda được áp dụng vào các đối số của nó, biểu thức của nó được đánh giá, và giá trị của nó được trả về.
Cú pháp của một lambda rất là chặt chẽ và giới hạn:

lambda <argname-1, …, argname-n>: <expression>

Tất cả code phải xuất hiện trên một dòng và, mặc dù nó là buồn, một lambda không thể bao gồm một phát biểu chọn, vì
các phát biểu chọn không phải là các biểu thức. Tuy nhiên, lambda có các tính chất của nó. Chúng ta bây giờ có thể
chỉ ra phép cộng hay phép nhân đang hoạt động, như phiên làm việc tiếp theo minh họa:

>>> data = [1, 2, 3, 4]
>>> reduce(lambda x, y: x + y, data) # Produce the sum
10
>>> reduce(lambda x, y: x * y, data) # Produce the product
24

Ví dụ tiếp theo thể hiện việc sử dụng range, reduce và lambda để đơn giản hóa định nghĩa của hàm summation thảo
luận trước kia trong học phần này:

from functools import reduce
def summation(lower, upper):

“””Returns the sum of the numbers from lower through upper.”””
return reduce(lambda x, y: x + y,

range(lower, upper + 1))

Chia sẻ