Python ou et et opérateur trap

Habituellement dans les langages de programmationorQuandand (Ou||Quand&&Expressions similaires telles que)Est(Point 2)Cela signifie une opération logique. Autrement dit, la valeur renvoyée par ʻor ou ʻand est une valeur booléenne (True / False). Dans les langages de la série C, True / False est parfois remplacé par 1/0, mais de toute façon, les opérations logiques ou et et renvoient les valeurs correspondant aux valeurs logiques. Cependant, en Python, «ou» et «et» ne renvoient pas toujours des valeurs logiques. En Python, les expressions «x et y» sont équivalentes à:

if not bool(x):  #Si la valeur logique de x est False
    return x  #Renvoie x lui-même au lieu de False sans voir y
else:  #Si la valeur logique de x est True
    return y  # bool(y)Ne pas se retourner

De même, l'expression «x ou y» équivaut à:

if bool(x):  #Si la valeur logique de x est True
    return x  #Renvoie x lui-même au lieu de True sans voir y
else:  #Si la valeur logique de x est False
    return y  # bool(y)Ne pas se retourner

En Python, en notant que la valeur logique d'une chaîne de longueur 0 est «False» et que la valeur logique d'une chaîne de longueur 1 ou supérieure est «True», elle peut être résumée comme suit:

'123' or '456'  -> '123'  # bool('123')Est vrai, donc la lvalue'123'Revenir
'123' or ''     -> '123'  # bool('123')Est vrai, donc la lvalue'123'Revenir
''    or '456'  -> '456'  # bool('')Est faux, donc rvalue'456'Revenir
''    or ''     -> ''     # bool('')Est faux, donc rvalue''Revenir
'123' and '456' -> '456'  # bool('123')Est vrai, donc rvalue'456'Revenir
'123' and ''    -> ''     # bool('123')Est vrai, donc rvalue''Revenir
''    and '456' -> ''     # bool('')Est False, donc la rvalue''Revenir
''    and ''    -> ''     # bool('')Est False, donc la rvalue''Revenir

Dans l'exemple ci-dessus, ** True / False n'est pas du tout retourné, même s'il est le résultat de ʻor et ʻand **. Si vous voulez vous assurer que la valeur retournée par les opérateurs logiques binaires (ou et et) en Python est toujours la valeur logique True / False, alors bool (x) ou bool (y) ʻor bool Doit être (x) et bool (y) (bien que bool (x ou y), bool (x and y) ʻ is fine). Normalement, vous ne passez aucune valeur autre que la valeur logique «Vrai / Faux» comme «x» ou «y», mais cela est parfois oublié car «bool (x)» est évalué automatiquement. La raison pour laquelle cela se produit est que l'on dit souvent que la gestion de "Aucun" est pratique. En Python, la valeur logique de None est False ( bool (None) -> False), donc le code suivant

#Je ne sais pas si x contient None
if x is None:
    x = '456'
# x = '456'Je peux écrire si x vaut None, mais personnellement je n'aime pas ça

Peut être remplacé par ** x = x ou '456' **. Cependant, ce n'est pas ** équivalent **. Le comportement lorsqu'une chaîne de caractères vide `` '' ou une liste vide [] est stockée dans x est différent. Si "x" contient "" "ou" [] "," x est Aucun "et" bool (x) "sont" Faux ". Par conséquent, dans le cas d'un code utilisant ʻis None, x n'est pas réaffecté, Dans le cas d'un code utilisant «x ou« 456 »», «456» est réaffecté à «x».

Attendez, qu'advient-il de ʻif x ou y: `?

Si ʻoune renvoie pas de valeur logique, est-ce que l'utilisation dex ou y dans ʻif a réussi? Non, cela fonctionnait inévitablement, pas par accident. En Python, la valeur de vérité de l'expression conditionnelle de ʻifest déterminée sans autorisation. En d'autres termes, la même chose que ʻif bool (x ou y):se fait sans permission.

Recommended Posts

Python ou et et opérateur trap
Opérateur de bits Python et somme logique
[Python] L'opérateur booléen (ou / et) ne renvoie pas de valeur booléenne
[Python] renvoie A [ou / et] B
[Python] Utiliser et et ou lors de la création de variables
Connectez beaucoup de Python ou et et
Mémo opérateur Python 3
Opérateur Trinity (Python)
Utilisation d'opérateurs non logiques de ou en python
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)
[python] Compresser et décompresser
Python> liste> extend () ou + =
piège d'argument par défaut de python
Itérateur et générateur Python
Python depuis ou import
autotest ou sniffer python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
entrée et sortie python
Mémorandum @ Python OR Séminaire
Python asyncio et ContextVar
À propos de la priorité de surcharge de l'opérateur Python
[Python] Chapitre 05-01 Syntaxe de contrôle (opérateur de comparaison et branchement conditionnel)
mémo python utilisant l'opérateur perl-ternaire
Chiffrement et déchiffrement avec Python
3-3, chaîne Python et code de caractère
Série Python 2 et série 3 (édition Anaconda)
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
Indentation Python et format de chaîne
division des nombres réels python (/) et division des nombres entiers (//)
Python 3.4 ou version ultérieure standard pip
Å (Ongustorome) et NFC @ Python
Apprenez à connaître les packages et les modules Python
# 2 [python3] Séparation et commentaire
Copie superficielle Python et copie profonde
Mémo tranche python et rubis
Installation de Python et grammaire de base
Méthode de concaténation de liste en python, différence entre list.extend () et opérateur «+»
J'ai comparé Java et Python!
Copie superficielle Python et copie profonde
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
Installez Python 3.7 et Django 3.0 (CentOS)
Construction d'environnement Python et TensorFlow
Variables de classe et d'instance Python
Syntaxe Ruby et Python ~ branch ~
[Python] Python et sécurité-① Qu'est-ce que Python?
Mémorandum @ Python OR Séminaire: Pulp
Pile et file d'attente en Python
Implémentation de Fibonacci et des nombres premiers (python)
bases de python: conditions et itérations
Module de débogage et de test Python
Liste Python et tapples et virgules
Variables Python et ID d'objet
Mémorandum @ Python OU Séminaire: Pandas
Notation et générateur d'inclusion de liste Python
À propos de Python et des expressions régulières