2012-11-29 23 views
5

tôi thấy loại này biểu hiện nhiều lần trong một chương trình python:Biểu thức Python này có ý nghĩa không?

if variable is not None: 
    dothings(variable) 

Có vẻ như xa lạ với tôi, và tôi nghĩ rằng nó không có ý nghĩa hơn:

if variable: 
    dothings(variable) 

Có lẽ tôi don' t biết Python đủ, và biểu hiện được giải thích ở đâu đó?

Trả lời

14

variable có thể 0, hoặc False hoặc [] hoặc (); có thể là 'falsy' nói cách khác, và sau đó câu lệnh if sẽ bị bỏ qua.

Xem Truth testing để biết thêm chi tiết về những gì được coi là sai trong ngữ cảnh boolean.

Tóm lại, thử nghiệm nếu variable is not None cho phép variablelà bất kỳ điều gì khác, bao gồm các giá trị được coi là sai trong ngữ cảnh boolean.

+0

Vì vậy, .... "A' is not' B "khác với" A là 'không B'" và Python áp dụng cái cũ. Phải không? – Zhen

+0

'không phải' là nghịch đảo của' is', vâng. Xem http://docs.python.org/2/reference/expressions.html#not-in. Bạn cũng có thể nói 'không A là B'. –

5

Một số giá trị là falsy, nhưng không phải là None. Bạn vẫn có thể muốn dothings() cho các giá trị đó.

Here are the things that are falsy in Python 2. (Bạn có thể muốn thay đổi '2' trong URL đến một '3' để có được các giá trị cho Python 3, nhưng nó đã không thay đổi nhiều.)

1

Ví dụ:

i = 0 

if i is not None: 
    print i # prints i 

if i: 
    print i # prints nothing 
0

Trong triển khai python bằng giọng nói google, tôi cũng sử dụng chúng trong khi gọi hàm. Các tham số được mặc định là "Không" và sau đó khi hàm được gọi, chúng có thể kiểm tra xem các giá trị được thay đổi hay mặc định. I.E.

def login (user=None, password=None) 
    if user is None: 
    user = input('Please enter your username'); 
    ... 
    return <something>; 

gọi bằng

login() 

HOẶC

login(user='cool_dude') 

HOẶC

bất kỳ sự kết hợp của người dùng/mật khẩu mà bạn muốn.

Ngoài ra, "cập nhật" của logic của bạn ngụ ý rằng biến == true hoặc false. Điều đó không đúng cho tất cả các trường hợp (nó có thể hoạt động trong một số trường hợp nhưng tôi đang loại bỏ chúng ra, vì nó không phải là trường hợp chung). Những gì bạn đang thử nghiệm bằng cách sử dụng logic "KHÔNG" là liệu biến có chứa bất cứ điều gì ngoài NONE không. Tương tự như những gì tôi đã nói ở trên, tất cả "chức năng đăng nhập" đang thực hiện là xác định xem người dùng có vượt qua bất kỳ điều gì hay không, không phải giá trị hợp lệ, đúng, v.v.