2012-01-11 24 views
10

tôi đã tự hỏi tại sao
True and []
lợi nhuận [] thay vì FalseOutput True và []

là sự biểu hiện một đường cú pháp?

+0

câu hỏi rất hay, tôi chưa bao giờ biết. Tôi đã có kế hoạch áp dụng này trong một số khía cạnh của mã của tôi, nơi situaion True sẽ cần thiết để trả về một danh sách trống. Bạn thấy nếu dòng là False và [], nó trả về false. tốt đẹp .. :) –

Trả lời

17

Câu trả lời được tìm thấy ở 5.10. Boolean Expressions:

Khái niệm x and y đầu tiên đánh giá x; nếu x là sai, giá trị của nó được trả về; nếu không, y được đánh giá và giá trị kết quả được trả về.

2

đường cú pháp này đôi khi được sử dụng như một ternary operator bằng Python

C++: someVar = someCondition ? valueIfTrue : valueIfFalse; 
Python: someVar = someCondition and valueIfTrue or valueIfFalse 

Edit: Hóa ra, theo ý kiến ​​:), đây là một cái bẫy lớn bằng Python và cần được thay thế bằng

someVar = valueIfTrue if condition else valueIfFalse 
+3

Xin lưu ý rằng đây không phải là tương đương, có một gotcha trong phiên bản python: Nếu 'valueIfTrue' đánh giá là' False', 'valueIfFalse' sẽ được trả về cho dù' someCondition' là 'True' hoặc' False' . Sử dụng 'someVar = valueIfTrue nếu someCondition else valueIfFalse' thay vì để tránh lỗ hổng này. –

+0

Không hoạt động nếu 'valueIfTrue' đánh giá thành giá trị False. Sau đó, tốt hơn nên sử dụng 'valueIfTrue nếu someCondition else valueIfFalse' (kể từ 2.5). BTW: The '? : 'ban đầu xuất phát từ C, không phải từ C++. – glglgl

+1

1. Đó không phải là cú pháp. Nó chỉ là ... cú pháp. (nếu không: đường là gì?). 2. 'a và b hoặc c' trong Python là WRONG. Nó có thể đánh giá 'c' khi bạn không có nghĩa là nó. – Celada

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