2012-10-14 39 views
24

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.

Trả lời

25

Đó 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.

+0

Rõ ràng, câu trả lời đơn giản. Cảm ơn bạn :) – Rez

28

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

+2

Đ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

+16

@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

4

Giá trị trả về của hàm không có tuyên bố returnNone. 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 
Các vấn đề liên quan