Câu hỏi về newbie Python, tại sao cú pháp này không hợp lệ: lambda: pass
, trong khi điều này: def f(): pass
là chính xác?Lệnh Python: pass ở dạng lambda
Cảm ơn thông tin chi tiết của bạn.
Câu hỏi về newbie Python, tại sao cú pháp này không hợp lệ: lambda: pass
, trong khi điều này: def f(): pass
là chính xác?Lệnh Python: pass ở dạng lambda
Cảm ơn thông tin chi tiết của bạn.
Đó là một lỗi vì sau dấu hai chấm bạn cần phải đặt giá trị trả về, vì vậy:
lambda: pass
bằng:
def f():
return pass
rằng thực sự chẳng có ý nghĩa và tạo ra một SyntaxError
như tốt.
lambdas chỉ có thể chứa các biểu thức - về cơ bản, một thứ có thể xuất hiện ở bên phải của câu lệnh gán. pass
không phải là một biểu thức - nó không đánh giá một giá trị, và a = pass
là không bao giờ hợp pháp.
Một cách khác để suy nghĩ về nó, bởi vì lambdas ngầm trả lại kết quả của cơ thể của họ, lambda: pass
thực sự là tương đương với:
def f():
return pass
nào không có ý nghĩa. Nếu bạn thực sự cần một lambda no-op vì lý do nào đó, hãy làm lambda: None
để thay thế.
Điều đó có ý nghĩa, cảm ơn! Nhưng sau đó, vì 'lambda: None' vẫn trả về một giá trị, có cách nào tôi có thể định nghĩa một hàm ẩn danh hoạt động chính xác như' def f(): pass'? – Rez
@Rez it * là * thực sự giống nhau - tất cả hàm Python trả về một giá trị; nếu họ rơi ra khỏi cuối, hoặc đạt được một 'trở lại' trần, họ trở lại 'Không có'. – lvc
Giá trị trả về của hàm không có tuyên bố return
là None
. Bạn có thể thấy điều này từ pass
chức năng đơn giản mà được định nghĩa trong OP:
>>> def f():
... pass
...
>>> print f()
None
Nếu bạn đang tìm kiếm một chức năng lambda đó là tương đương với "no-op" chức năng này, sau đó bạn có thể sử dụng:
lambda: None
Ví dụ:
>>> f = lambda: None
>>> print f()
None
Rõ ràng, câu trả lời đơn giản. Cảm ơn bạn :) – Rez