2013-09-05 15 views
5

so logicamente and viene utilizzato per booleani valutare al vero se entrambe le condizioni sono vere, ma ho un problema con la seguente dichiarazione:e il funzionamento di sovraccarico in 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

cosa vuoi stampare? – alecxe

+7

Gli operatori logici di Python non restituiscono i booleani. Dai un'occhiata alla documentazione: http://docs.python.org/3.3/library/stdtypes.html#boolean-operations-and-or-not – Blender

risposta

7

x and y in pratica significa:

ritorno y, a meno che non x è false-ish - in tal caso il ritorno x

Ecco una lista di possibili combinazioni:

>>> 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

Per un attimo ho pensato di digitare manualmente tutte quelle operazioni (poi ho fatto scorrere trovato e trovato 'combinazioni'). ;-) –

+1

@AshwiniChaudhary: non oserei;) Potrei comunque semplicemente incollare l'output, quindi non avrei bisogno di spiegare cosa fa 'combination', ma in questo modo ho dato a OP non solo la risposta, ma anche lo strumento per esplorare ulteriormente. – Tadeck

10

and non sia sovraccarico.

Nel codice, "ashish" è un valore di verità (perché le stringhe non vuote sono verità), quindi valuta "sahil". Come "sahil" è anche un valore di verità, "sahil" viene restituito all'istruzione di stampa e viene quindi stampato.

+2

Anche se "sahil" non fosse vero, sarebbe comunque il valore restituito dall'operatore 'and'. – chepner

+0

@MattBryant: come @chepner ha detto, il secondo elemento viene sempre restituito, a meno che il primo elemento non sia considerato falso (ad esempio, stringa vuota, 'False', zero, elenco vuoto ecc.). – Tadeck

+0

Sì, probabilmente avrei dovuto spiegarlo, ma immagino che @chepner lo abbia trattato bene. –

4

Se il risultato dell'espressione a sinistra di and è falso, lo valuta. Altrimenti, valuta il risultato dell'espressione alla sua destra. "ashish" è vero.

Problemi correlati