Les opérateurs de comparaison peuvent être chaînés en python, de sorte que, par exemple, L'arborese de syntaxe abstraite de cette opération ressemble à: p> joli imprimé: p> mais il semble que cela semble Analysez comme quelque chose comme Comment l'AST pour les comparaisons enchaînées peut-elle être expliquée? P> P> x
(x
y code> est garanti pour être évalué une seule fois.
0 << 1 2 code> Et je ne sais pas comment concilier que avec le résultat logique de quelque chose comme
0 <1 et 1 <2 code>. p>
3 Réponses :
Je pense que vous devez y penser comme un pipeline à court-circuit de choses à faire. par exemple. Si vous ZIP CODE> Le
ops code> avec les comparateurs
code>, puis travaillez-les un à la fois:
result = left
for op, comparator in zip(ops, comparators):
result = result and evaluate(result, op, comparator)
if not result:
break
Le raisonnement derrière cela est en fait mentionné dans le ast code>
docs
def Compare(left, ops, comparators): if not ops[0](left, comparators[0]): return False for i, comparator in enumerate(comparators[1:], start=1): if not ops[i](comparators[i-1], comparator): return False return True
J'écrirais le comparer () code> la procédure un peu différemment. Voir Ma réponse .
Je voudrais compléter La réponse de Brendan Abel avec ma version du Comparer () code> Fonction, que l'IMHO est un peu plus facile à comprendre: