and
et or
agissent en python comme un court-circuit dans certains cas.
Dans une expression x and y
, si x est évalué à False
, il n'est pas nécessaire de regarder y car le résultat sera faux. Dites, vous voulez obtenir sys.argv[2]
, mais seulement dans le cas où il y a assez d'arguments. Ensuite, vous pouvez faire:
len (sys.argv)> 2 et [sys.argv [2]]
Donc, si sys.argv
a une longueur de 2 ou moins, len(sys.argv) > 2
évaluera false et il ne évaluer sys.argv[2]
(et donc ne pas courir dans un IndexError
).
De même, dans une expression x or y
, que lorsque x
est évaluée à False
sera y
évaluer.Par conséquent, si le nombre d'arguments est inférieur ou égal à 2, fn
prendra la valeur ['test_out.jpg']
. Enfin, les parenthèses sont ensuite pour obtenir l'index zéro en utilisant le [0]
final dans l'expression
En résumé: si le nombre d'arguments est 2 ou plus, affectez fn
à sys.argv[2]
, sinon attribuez fn
à 'test.out.jpg'
.
merci - ne savait pas 'sys.argv [2:]' était fonctionnellement équivalent à 'len (sys.argv)> 2' ... –