Ce serait sage si vous pouviez écrire quelque chose comme booléen et "A" ou "B" [Python] [Mais]

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.

Branchement conditionnel à l'aide de l'opérateur booléen

É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.

Vrai si
Arithmétique Résultat
x ou y y si x est faux, x sinon
x et y x si x est faux, y sinon
not x x est faux, Faux 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.

Mais ...

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

Ce serait sage si vous pouviez écrire quelque chose comme booléen et "A" ou "B" [Python] [Mais]
[Python] renvoie A [ou / et] B
Écrivons un programme Python et exécutons-le
[Python] Combiner des listes contenant des nombres en chaînes et les écrire dans un fichier de sortie
Comment écrire une classe méta qui prend en charge à la fois python2 et python3
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
Python a + = b et a = a + b sont différents
・ <Slack> Ecrire une fonction pour notifier Slack afin qu'elle puisse être citée à tout moment (Python)
[Introduction à Python] Comment utiliser l'opérateur booléen (et ・ ou ・ non)
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
Connectez beaucoup de Python ou et et
Compressez les données python et écrivez sur sqlite
Comment générer un code QR et un code à barres en Python et le lire normalement ou en temps réel avec OpenCV
Je pensais qu'il serait lent d'utiliser l'instruction for dans NumPy, mais ce n'était pas le cas.
Atcoder Beginner Contest A, B Résumé d'entrée qui a tendance à être un problème Python
Apprentissage amélioré 35 python Développement local, attachez un lien vers myModule et importez-le.
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
Langage C pour voir et se souvenir de la partie 3 Appelez le langage C depuis Python (argument) c = a + b
Installez la bibliothèque python lorsque vous n'êtes pas un sudoer (ou si vous ne voulez pas que les nouveaux utilisateurs soient Sudoer, mais cela ne vous dérange pas d'avoir la bibliothèque Python incluse)
Souhaitez-vous créer un CV Twitter?
Créez un chat bot et entraînez-vous à être populaire.
Pourquoi Python doit-il écrire un deux-points?
python memo- "sinon A et B" était "si (pas A) et B"
[Go] Comment écrire ou appeler une fonction
Je veux écrire dans un fichier avec Python
Fileinput, un module qui facilite l'écriture de programmes de filtrage de type Perl en Python
Création d'une bibliothèque Python pour écrire des inclusions complexes et les réduire de manière facile à lire
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Créez rapidement un tableau de bord d'analyse de données Python avec Streamlit et déployez-le sur AWS
En regardant la différence entre le putain de gros Rashomon, il s'est avéré être une putain de grosse littérature en désordre comme la mort d'un parent
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
[Python] L'opérateur booléen (ou / et) ne renvoie pas de valeur booléenne
Python que je voudrais recommander aux débutants en programmation
Je veux écrire en Python! (2) Écrivons un test
Comment écrire un type liste / dictionnaire de Python3
Ce n'est pas facile d'écrire Python, c'est facile d'écrire numpy et scipy
Écrire des tests en Python pour profiler et vérifier la couverture
[Python] Comment écrire une docstring conforme à PEP8
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Écrire du code dans UnitTest une application Web Python
J'ai écrit python3.4 dans .envrc avec direnv et je l'ai autorisé, mais j'ai eu une erreur de syntaxe
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
Un moyen simple de visualiser le temps pris en Python et un moyen plus intelligent de l'améliorer
L'utilisation du japonais pour les noms de dossier et les noms de bloc-notes dans Databricks peut poser problème
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées