Ceci est un mémorandum (j'étudiais Click) parce que je l'ai vu pour la première fois en étudiant le code du tutoriel.
Étant donné que l'opérateur booléen en Python renvoie la valeur de la comparaison, pas la valeur booléenne,
>>> def test(flag=True):
... print 'flag: %s' % (flag and 'on' or 'off')
...
Si tu le fais
>>> test(True)
flag: on
>>> test(False)
flag: off
On dirait. Notez que ʻand et ʻor
ici sont des opérateurs booléens, pas des opérateurs de comparaison.
Comme vous pouvez le voir dans Section des opérateurs booléens de référence de la bibliothèque Python, les opérateurs ʻand,
ou "et" non "sont évalués par ordre de priorité croissant, comme indiqué dans le tableau ci-dessous.
Arithmétique td> | Résultat td> |
x ou y td> | y si x est faux, x td> sinon |
x et y td> | x si x est faux, y td> sinon |
not x | Vrai six est faux, Faux td> sinon |
Par conséquent, les chaînes non vides étaient toujours évaluées comme «True», donc
Si l'indicateur est «True»:
(Parce que le terme de gauche est "True")
-> 'on' or 'off'
(Parce que la chaîne "on" est "True")
-> 'on'
Si l'indicateur est «False»:
(Parce que le terme de gauche est "Faux")
-> False or 'off'
(Parce que le terme de gauche est "Faux")
-> 'off'
C'était.
C'était rafraîchissant de savoir ce qui se passait. Cela a l'air rafraîchissant et peut sembler intelligent.
Cependant, c'est une autre question si on me demande si j'écrirai ainsi à l'avenir. J'écrirais honnêtement ceci.
>>> def test(flag=True):
... print 'flag: %s' % ('on' if flag else 'off')
Au fait, ce n'est pas une notation inclusive, cela semble être un opérateur ternaire implémenté à partir de la version 2.5, mais cela ressemble toujours à Python, donc c'est mieux.
De plus, dans le premier exemple, il existe une restriction selon laquelle la partie de la chaîne de caractères "sur" doit contenir quelque chose qui devient à chaque fois "Vrai". Limiter l'évaluation de ce qui est attribué peut être un bug fatal dans certains cas, donc je pense qu'il est prudent d'écrire en utilisant l'opérateur ternaire.
référence
Recommended Posts