2013-09-05 25 views
5

Tôi biết một cách logic and được sử dụng cho các phép toán luận đánh giá là true nếu cả hai điều kiện là đúng, nhưng tôi có một vấn đề với các tuyên bố sau:và hoạt động quá tải trong python

print "ashish" and "sahil" 

it prints out "sahil"? 
another example: 
return s[0] == s[-1] and checker(s[1:-1]) 
(taken from recursive function for palindrome string 
checking    
please explain it and other ways and is oveloaded ,especially what the second statement do. 
+3

bạn muốn in nội dung nào? – alecxe

+7

Các toán tử logic của Python không trả về các boolean. Hãy xem tài liệu: http://docs.python.org/3.3/library/stdtypes.html#boolean-operations-and-or-not – Blender

Trả lời

7

x and y về cơ bản có nghĩa là:

trở y, trừ khi x là False-ish - trong trường hợp trở lại như x

Dưới đây là danh sách các kết hợp có thể:

>>> from itertools import combinations 
>>> items = [True, False, 0, 1, 2, '', 'yes', 'no'] 
>>> for a, b in combinations(items, 2): 
    print '%r and %r => %r' % (a, b, a and b) 


True and False => False 
True and 0 => 0 
True and 1 => 1 
True and 2 => 2 
True and '' => '' 
True and 'yes' => 'yes' 
True and 'no' => 'no' 
False and 0 => False 
False and 1 => False 
False and 2 => False 
False and '' => False 
False and 'yes' => False 
False and 'no' => False 
0 and 1 => 0 
0 and 2 => 0 
0 and '' => 0 
0 and 'yes' => 0 
0 and 'no' => 0 
1 and 2 => 2 
1 and '' => '' 
1 and 'yes' => 'yes' 
1 and 'no' => 'no' 
2 and '' => '' 
2 and 'yes' => 'yes' 
2 and 'no' => 'no' 
'' and 'yes' => '' 
'' and 'no' => '' 
'yes' and 'no' => 'no' 
+1

Trong một khoảnh khắc, tôi nghĩ bạn đã nhập thủ công tất cả các hoạt động đó (sau đó tôi đã cuộn lên và tìm thấy 'kết hợp'). ;-) –

+1

@AshwiniChaudhary: Tôi không dám;) Tuy nhiên tôi có thể chỉ cần dán đầu ra, vì vậy tôi sẽ không cần giải thích 'kết hợp' làm gì, nhưng theo cách này tôi đã cung cấp cho OP không chỉ câu trả lời, mà còn là công cụ để khám phá nó hơn nữa. – Tadeck

10

and không bị quá tải.

Trong mã của bạn, "ashish" là giá trị trung thực (vì các chuỗi không trống là trung thực), vì vậy nó đánh giá "sahil". Như "sahil" cũng là một giá trị trung thực, "sahil" được trả về bản in và sau đó được in.

+2

Ngay cả khi "sahil" không đúng sự thật, nó vẫn sẽ là giá trị được trả về bởi toán tử 'và'. – chepner

+0

@MattBryant: Như @chepner đã nói, phần tử thứ hai được trả về luôn, trừ khi phần tử đầu tiên được coi là sai (ví dụ: chuỗi rỗng, 'False', số không, danh sách trống, v.v.). – Tadeck

+0

Vâng, có lẽ tôi nên giải thích điều đó, nhưng tôi hình @chepner bảo vệ nó tốt. –

4

Nếu kết quả của biểu thức ở bên trái của and là sai, nó sẽ đánh giá điều đó. Nếu không, nó sẽ đánh giá kết quả của biểu thức bên phải của nó. "ashish" là sự thật.

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