2013-08-28 26 views

Trả lời

15

Python sẽ làm hết sức mình để đánh giá "truthiness" của một biểu thức khi một giá trị boolean là cần thiết từ biểu thức đó.

Quy tắc cho chuỗi là chuỗi rỗng được coi là False, một chuỗi không trống được coi là True. Quy tắc tương tự được áp dụng cho các vùng chứa khác, do đó, một từ điển hoặc danh sách trống được coi là False, từ điển hoặc danh sách có một hoặc nhiều mục được coi là True.

Đối tượng None cũng được coi là sai.

Giá trị bằng số 0 được coi là sai (mặc dù giá trị chuỗi '0' được coi là đúng).

Tất cả các biểu thức khác được coi là True.

Chi tiết (bao gồm cách các loại do người dùng xác định có thể xác định sự thật) có thể tìm thấy tại đây: http://docs.python.org/release/2.5.2/lib/truth.html.

+0

+1 để liên kết tài liệu – Germano

+0

Tôi tin rằng Python sẽ luôn kiểm tra __len __() của bất kỳ lớp nào có một và xem kết quả là 0 có nghĩa là đối tượng đánh giá thành 'false' trong ngữ cảnh boolean. Điều này là khá gần với cùng một điều như áp đặt cùng một quy tắc ngay cả trên các lớp do người dùng định nghĩa (bạn phải cố ý trả về một số giá trị không trực quan từ phương thức __len __() của bạn, hoặc bỏ nó ra hoàn toàn, để tránh quy tắc như được xây dựng). –

+1

Đối với bất kỳ ai đọc câu trả lời ở trên: hãy đảm bảo rằng bạn thực sự đọc tài liệu (hoặc liên kết ở trên hoặc tại đây: http://docs.python.org/2/reference/datamodel.html#object.__nonzero__) –

8

Trong python, bất kỳ chuỗi trừ một giá trị mặc định chuỗi rỗng để True

tức,

if "MyString": 
    # this will print foo 
    print("foo") 

if "": 
    # this will NOT print foo 
    print("foo") 
+0

Điều này cũng đúng cho danh sách và các loại dữ liệu khác, phải không? – navyad

+0

"mặc định là' True' "không thực sự chính xác. Làm thế nào về "đánh giá' True' trong một bối cảnh Boolean "? –

+0

naveen yadav, vâng, nó là đúng cho tất cả các loại bộ sưu tập tích hợp sẵn. Các bộ sưu tập trống là các bộ sưu tập Sai, không trống là True. Chuỗi là một chuỗi, là một loại bộ sưu tập. – Hammerite

5

gì đang xảy ra ở đây là Python' bổ sung ngầm bool() constructor sau if, Bởi vì bất cứ điều gì tiếp theo if nên được giải quyết là boolean.Trong bối cảnh này mã của bạn là tương đương với

if bool("poi"): 
    print "yes" 

Theo Python bool(x) constructor chấp nhận bất cứ điều gì và quyết định truthiness dựa trên dưới trường hợp

  • Nếu x là số nguyên, Chỉ 0False mọi thứ khác là True
  • Nếu x là phao, Chỉ 0.0False mọi thứ khác là True`
  • Nếu x là danh sách, Chỉ []False mọi thứ khác là True
  • Nếu x được thiết lập/dict, Chỉ {}False mọi thứ khác là True
  • Nếu x là tuple, Chỉ ()False mọi thứ khác là True
  • Nếu x là chuỗi, Chỉ “"False mọi thứ khác là True. Hãy nhận biết rằng bool(“False”) sẽ trở lại True

Đây là nhật ký cho các trường hợp tôi liệt kê ở trên

Python 3.4.3 (default, Feb 25 2015, 21:28:45) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.56)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> bool(0) 
False 
>>> bool(1) 
True 
>>> bool(-1) 
True 
>>> bool(0.0) 
False 
>>> bool(0.02) 
True 
>>> bool(-0.10) 
True 
>>> bool([]) 
False 
>>> bool([1,2]) 
True 
>>> bool(()) 
False 
>>> bool(("Hello","World")) 
True 
>>> bool({}) 
False 
>>> bool({1,2,3}) 
True 
>>> bool({1:"One", 2:"Two"}) 
True 
>>> bool("") 
False 
>>> bool("Hello") 
True 
>>> bool("False") 
True 
Các vấn đề liên quan