Trong Python, bạn' thường sẽ chỉ sử dụng một lambda cho các hàm rất đơn giản, ngắn gọn, dễ dàng khớp với bên trong dòng đang tạo ra chúng. (Một số ngôn ngữ có ý kiến khác.)
Khi @DSM gợi ý trong nhận xét của họ, lambdas về cơ bản là lối tắt để tạo các hàm khi không đáng để đặt tên cho chúng.
Nếu bạn đang làm những điều phức tạp hơn, hoặc nếu bạn cần đặt tên cho mã sau này, biểu thức lambda sẽ không có nhiều phím tắt cho bạn - thay vào đó, bạn cũng có thể def
ine một hàm cũ đơn giản.
Vì vậy, thay vì gán biểu thức lambda cho một biến:
y = lambda u: u**(-2) + 8
Bạn có thể định nghĩa biến mà là một chức năng:
def y(u):
return u**(-2) + 8
nào mang đến cho bạn phòng để giải thích một chút, hoặc là phức tạp hơn hoặc bất cứ điều gì bạn cần làm:
def y(u):
"""
Bloopinate the input
u should be a positive integer for fastest results.
"""
offset = 8
bloop = u ** (-2)
return bloop + offset
Chức năng và lambdas đều là "callabl e ", có nghĩa là chúng chủ yếu có thể hoán đổi cho đến tận scipy.integrate.quad()
.
Để kết hợp các cuộc gọi, bạn có thể sử dụng một số kỹ thuật khác nhau.
def triple(x):
return x * 3
def square(x):
return x * x
def triple_square(x):
return triple(square(x))
def triple_plus_square(x):
return triple(x) + square(x)
def triple_plus_square_with_explaining_variables(x):
tripled = triple(x)
squared = square(x)
return tripled + squared
Có nhiều tùy chọn nâng cao hơn mà tôi sẽ chỉ xem xét nếu nó làm cho mã của bạn rõ ràng hơn (có thể là không).Ví dụ, bạn có thể đặt callables trong một danh sách:
all_the_things_i_want_to_do = [triple, square]
Một khi họ đang ở trong một danh sách, bạn có thể sử dụng hoạt động dựa trên danh sách để làm việc trên chúng (kể cả áp dụng chúng lần lượt để reduce
danh sách xuống một giá trị duy nhất).
Nhưng nếu mã của bạn giống như hầu hết mã, các hàm thông thường chỉ gọi nhau theo tên sẽ là cách đơn giản nhất để viết và dễ đọc nhất.
Tôi không quen với 'scipy.integrate.quad', nhưng' f = lambda u: y (u) + x (u) 'sẽ là một cách để thêm hai hàm này lại với nhau. –
Ngoài ra: tại sao bạn lại sử dụng 'lambda' nếu bạn định đặt tên cho hàm của bạn ngay lập tức? – DSM
Thành thật mà nói tôi đang sử dụng lambda bởi vì tôi không biết bất kỳ tùy chọn khác với kinh nghiệm python rất hạn chế của tôi, đó là lý do tại sao tôi thêm phần cuối cùng cho câu hỏi. – coffeepls