Expression booléenne Python et ou

En python si vous écrivez quelque chose comme

foo==bar and spam or eggs

python semble revenir spam si le booléen est vrai et les œufs autrement. Quelqu'un pourrait expliquer ce comportement? Pourquoi l'expression n'étant pas évalués comme un long boolean?

Edit: plus Précisément, je suis à essayer de comprendre le mécanisme pourquoi "spam" ou "œufs" est retournée comme résultat de l'expression.

source d'informationauteur Zxaos