Maison >développement back-end >Tutoriel Python >Introduction détaillée à l'utilisation réelle de et et ou en Python

Introduction détaillée à l'utilisation réelle de et et ou en Python

零下一度
零下一度original
2017-05-26 11:58:027900parcourir

Propriétés spéciales de et et ou

Dans Python, et et ou effectuent des opérations logiques booléennes, mais elles ne renvoient pas de valeur booléenne à la place, renvoie ; l'une des valeurs auxquelles ils se comparent réellement. Jetons un coup d'œil à un exemple.

>>> 'a' and 'b'        
'b'
>>> '' and 'b'         
''
>>> 'a' and 'b' and 'c'
'c'

Lors de l'utilisation de et , la valeur de l'expression est évaluée de gauche à droite dans un contexte booléen. 0, '', [], (), {}, Aucun n'est faux dans un contexte booléen ; tout le reste est vrai. Enfin, presque tout. Par défaut, les instances de classe dans un contexte booléen sont évaluées comme étant vraies, mais vous pouvez définir des méthodes spécifiques dans la classe qui entraînent l'évaluation des instances de classe comme fausses. Vous découvrirez les classes et ces méthodes spéciales au chapitre 5. Si toutes les valeurs du contexte booléen sont vraies, alors et renvoie la dernière valeur. Dans cet exemple, le calcul and évalue « a » à vrai, puis « b » à vrai et renvoie enfin « b ».
Si une valeur dans le contexte booléen est fausse, alors et renvoie la première valeur fausse. Dans cet exemple, '' est la première valeur fausse.
Toutes les valeurs sont vraies, donc et renvoie la dernière vraie valeur, 'c'.

>>> 'a' or 'b'         
'a'
>>> '' or 'b'          
'b'
>>> '' or [] or {}     
{}
>>> def sidefx():
...     print "in sidefx()"
...     return 1
>>> 'a' or sidefx()    
'a'

Lors de l'utilisation de or, les valeurs sont évaluées de gauche à droite dans un contexte booléen, tout comme et. Si une valeur est vraie ou renvoie cette valeur immédiatement. Dans ce cas, « a » est la première valeur de vérité.
ou évalue '' à false, puis évalue 'b' à true et renvoie 'b' .
Si toutes les valeurs sont fausses, ou renvoie la dernière valeur fausse. ou évalue '' à false, puis évalue [] à false, qui à son tour évalue {} à false et renvoie enfin {} .
Notez que ou dans un contexte booléen évaluera l'expression jusqu'à ce que la première valeur vraie soit trouvée, puis ignorera les valeurs de comparaison restantes. Cette propriété est importante si certaines valeurs ont des effets secondaires. Ici, la fonction sidefx ne sera jamais appelée, car l'opération or évalue « a » comme étant vrai, elle renvoie donc « a » immédiatement.

Si vous êtes un hacker en langage C, vous devez être familier avec l'expression bool a : b. Si bool est vrai, l'expression est évaluée à a, sinon c'est b. En fonction de la manière dont et/ou travaillez en Python, vous pouvez accomplir la même chose.

Exemple. Introduction aux techniques et-ou

>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'

Cette syntaxe ressemble à l'expression bool a : b en langage C. L'expression entière est évaluée de gauche à droite, donc l'expression et est évaluée en premier. 1 et « premier » sont évalués à « premier », puis « premier » ou « deuxième » sont évalués à « premier ».
0 et « premier » sont évalués à False, puis 0 ou « second » sont évalués à « second ».

Cependant, comme cette expression Python n'effectue que des opérations logiques booléennes et n'est pas un composant spécifique du langage, il s'agit de la technique et-ou et la syntaxe booléenne a : b en langage C est très différence importante. Si a est faux, l’expression ne fonctionne pas comme prévu. (Savez-vous que j'ai été troublé par ce problème ? Plus d'une fois ?)

Exemple lorsque la technique et-ou est invalide

>>> a = ""
>>>b = "second"
>>> 1 and a or b        
'second'

Parce que a est un. espace videString, la chaîne vide est considérée comme fausse dans le contexte booléen de Python, 1 et '' sont évalués à '', et enfin '' ou 'second' sont évalués à 'second'. Oh! Cette valeur n'est pas celle que vous souhaitez.

L'astuce and-or, l'expression bool et a ou b, ne fonctionne pas comme l'expression bool a : b du langage C lorsqu'a est évalué à false dans un contexte booléen.

La véritable astuce derrière l'astuce and-or est de s'assurer que la valeur de a n'est jamais fausse. La méthode la plus courante consiste à créer a [a] et b [b], puis à utiliser le premier élément de la liste de valeurs de retour, qui doit être l'un des a ou b.

Exemple : SûrUtilisez l'astuce et-ou

>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]
''

Puisque [a] est une liste non vide, elle ne sera jamais fausse. Même si a vaut 0 ou '' ou une autre valeur fausse, la liste [a] est vraie car elle comporte un élément.

À l’heure actuelle, cette astuce peut sembler poser plus de problèmes qu’elle n’en vaut la peine. Après tout, la même chose peut être accomplie en utilisant une instruction if, alors pourquoi se donner tant de mal ? Eh bien, dans de nombreux cas, vous aurez à choisir entre deux valeurs constantes, et puisque vous savez que a sera toujours évalué à vrai, vous pouvez utiliser cette syntaxe plus simple sans vous inquiéter. Il existe encore de bonnes raisons de recourir à des formes de sécurité plus sophistiquées. Par exemple, il existe certaines situations dans le langage Python où les instructions if ne sont pas autorisées, comme dans les fonctions lambda.

Remarque  : Les déclarations ici sont interprétées de gauche à droite. Nous pouvons le comprendre de cette façon.
et instruction :
0et* Il n'est pas nécessaire de déterminer si * vaut 0 ou 1, le résultat est 0
1et* Vous devez considérer si * vaut 0 ou 1 pour déterminer le résultat.

1ou* Il n'est pas nécessaire de considérer ce qui suit *, le résultat est 1
0ou* Il est nécessaire de considérer ce qui suit * pour déterminer le résultat

【Recommandations associées】

1. Résumé Python de et, ou et et-ou syntaxe

2 Analyse de l'utilisation de et et ou en python

3.

Partager et/ou en python Tutoriel d'exemple de logique opérationnelle

4

Résumé des opérateurs logiques de Python et

5. Python : jugement logique et exemples d'opérateurs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn