2009-07-22 26 views
5

Chỉ cần dụng cụ xung quanh để giải trí của riêng tôi, và tôi muốn sử dụng một lambda, bởi vì tôi cảm thấy thích nó. Tôi có thể thay thế hàm này bằng lambda không?Đánh giá Boolean trong một lambda

def isodd(number): 
    if (number%2 == 0): 
     return False 
    else: 
     return True 

Tiểu học, có. Nhưng tôi quan tâm để biết ...

Trả lời

12

Và nếu bạn không thực sự cần một chức năng bạn có thể thay thế nó thậm chí không có một lambda. :)

(number % 2 != 0) 

là chính nó là biểu thức đánh giá đúng hoặc sai. Hoặc thậm chí plainer,

bool(number % 2) 

mà bạn có thể đơn giản hóa như vậy:

if number % 2: 
    print "Odd!" 
else: 
    print "Even!" 

Nhưng nếu đó là có thể đọc được hay không có lẽ trong mắt của kẻ si tình.

+0

Hãy xem, đây là trọng tâm của vấn đề. Tôi đã được ấn tượng rằng cả 0 và 1 là True trong Python, vì chúng là cả hai ints. – SilentW

+3

http://docs.python.org/library/stdtypes.html - "Các giá trị sau được coi là sai: ... không thuộc bất kỳ loại số nào, ví dụ: 0" – Ken

+0

Tôi vẫn sẽ gắn nó vào một hàm . Với modulo 2, tôi luôn luôn cần một hoặc hai giây để tìm hiểu xem nó có đánh giá đúng hay không. nếu isodd (số) là rõ ràng hơn. Các chi tiết nhỏ như thế này có xu hướng thêm vào để tạo nên sự khác biệt thực sự. –

7
lambda num: num % 2 != 0 
4
isodd = lambda number: number %2 != 0 
7

Có bạn có thể:

isodd = lambda x: x % 2 != 0 
5

Những người khác đã trả lời cho bạn về trường hợp cụ thể của bạn. Nói chung, tuy nhiên, khi bạn thực sự cần một số if, bạn có thể sử dụng biểu thức có điều kiện. Ví dụ, nếu bạn muốn phải trả lại chuỗi "False""True" hơn là giá trị boolean, bạn có thể làm điều này:

lambda num: "False" if num%2==0 else "True" 

Các definition của biểu thức này trong tài liệu tham khảo ngôn ngữ Python là như sau:

Biểu thức x if C else y đánh giá đầu tiên C (không phải x); nếu C là đúng, x được đánh giá và giá trị của nó được trả về; nếu không, y được đánh giá và giá trị của nó được trả về.

3

Và đừng quên rằng bạn có thể mô phỏng các câu có điều kiện phức tạp với logic ngắn mạch đơn giản, lợi dụng "và" và "hoặc" trả lại một số ưu tiên của chúng (giá cuối cùng được đánh giá) ... Ví dụ, trong trường hợp này, giả sử bạn muốn quay trở lại một cái gì đó khác với Đúng hay Sai

lambda x: x%2 and "Odd" or "Even" 
1

isodd = lambda number: (False, True)[number & 1]

0

Bất cứ lúc nào bạn thấy mình viết:

if (some condition): 
    return True 
else: 
    return False 

bạn nên thay thế nó bằng một dòng duy nhất:

return (some condition) 

Chức năng của bạn sau đó trở thành:

def isodd(number): 
    return number % 2 != 0 

Bạn sẽ có thể để xem làm thế nào để có được từ đó đến giải pháp lambda mà người khác đã cung cấp .

+2

Bất cứ khi nào bạn thấy mình viết 'if (một số điều kiện):' hoặc 'trả về (một số điều kiện)', mất dấu ngoặc đơn. –

+1

Vâng, tôi biết. Nhưng tôi nghĩ rằng ví dụ đọc tốt hơn, cho rằng 'một số điều kiện' không phải là cú pháp hợp lệ. Có lẽ tôi nên sử dụng dấu ngoặc vuông. –

+0

Thử 'some_condition' –

Các vấn đề liên quan