Cours Python en ligne
En tant que programmeur Python, vous aurez souvent affaire à des booléens et des instructions conditionnelles, parfois très complexes. Dans ces situations, vous devrez peut-être compter sur des outils qui peuvent simplifier la logique et consolider les informations. Heureusement, tout()
en Python est un tel outil. Il examine les éléments dans un itérable et renvoie une valeur unique indiquant si un élément est vrai dans un contexte booléen, ou véridique.
Dans ce didacticiel, vous apprendrez:
- Comment utiliser
tout()
- Comment décider entre
tout()
etou
Plongeons dedans!
Arrêt au stand Python: Ce tutoriel est un rapide et pratique moyen de trouver les informations dont vous avez besoin, vous serez donc de retour à votre projet en un rien de temps!
Comment utiliser tout()
en Python
Imaginez que vous rédigez un programme pour le service de recrutement de votre employeur. Vous pouvez planifier des entretiens avec des candidats qui répondent à l'un des critères suivants:
- Connaissez déjà Python
- Avoir cinq ans ou plus d'expérience en tant que développeur
- Avoir un diplôme
Un outil que vous pourriez utiliser pour écrire cette expression conditionnelle est ou
:
# recrute_developer.py
def horaire_interview(demandeur):
impression(F"Entretien prévu avec demandeur['name']")
candidats = [[[[
"Nom": "Devon Smith",
"langages de programmation": [[[["c ++", "ada"],
"des années d'expérience": 1,
"has_degree": Faux,
"adresse électronique": "devon@email.com",
,
"Nom": "Susan Jones",
"langages de programmation": [[[["python", "javascript"],
"des années d'expérience": 2,
"has_degree": Faux,
"adresse électronique": "susan@email.com",
,
"Nom": "Sam Hughes",
"langages de programmation": [[[["Java"],
"des années d'expérience": 4,
"has_degree": Vrai,
"adresse électronique": "sam@email.com",
,
]
pour demandeur dans candidats:
sait_python = "python" dans demandeur[[[["langages de programmation"]
experiment_dev = demandeur[[[["des années d'expérience"] > = 5
répond à_criteria = (
sait_python
ou experiment_dev
ou demandeur[[[["has_degree"]
)
si répond à_criteria:
horaire_interview(demandeur)
Dans l'exemple ci-dessus, vous vérifiez les informations d'identification de chaque candidat et planifiez un entretien si le candidat répond à l'un de vos trois critères.
Détails techniques: Python tout()
et ou
ne se limitent pas à l'évaluation des expressions booléennes. Au lieu de cela, Python effectue un test de valeur de vérité sur chaque argument, évaluant si l'expression est véridique ou fausse. Par exemple, des valeurs entières non nulles sont considérées comme véridiques et zéro est considéré comme faux:
Dans cet exemple, ou
évalué la valeur non nulle 1
comme véridique même si ce n'est pas de type booléen. ou
revenu 1
et n'a pas eu besoin d'évaluer la véracité de 0
. Plus loin dans ce didacticiel, vous en apprendrez plus sur la valeur de retour et l'évaluation des arguments de ou
.
Si vous exécutez ce code, vous verrez que Susan et Sam obtiendront des interviews:
$ python recrute_developer.py
Entretien prévu avec Susan Jones
Entretien prévu avec Sam Hughes
La raison pour laquelle le programme a choisi de planifier des entrevues avec Susan et Sam est que Susan sait déjà que Python et Sam ont un diplôme. Notez que chaque candidat ne devait répondre qu'à un critère.
Une autre façon d'évaluer les titres de compétences des candidats consiste à utiliser tout()
. Lorsque vous utilisez tout()
en Python, vous devez transmettre les informations d'identification des candidats comme argument itérable:
pour demandeur dans candidats:
sait_python = "python" dans demandeur[[[["langages de programmation"]
experiment_dev = demandeur[[[["des années d'expérience"] > = 5
identifiants = (
sait_python,
experiment_dev,
demandeur[[[["has_degree"],
)
si tout(identifiants):
horaire_interview(demandeur)
Lorsque vous utilisez tout()
en Python, gardez à l'esprit que vous pouvez passer n'importe quel itérable comme argument:
>>> tout([[[[0, 0, 1, 0])
Vrai
>>> tout(ensemble((Vrai, Faux, Vrai)))
Vrai
>>> tout(carte(str.isdigit, "Bonjour le monde"))
Faux
Dans chaque exemple, tout()
boucle sur un autre Python itérable, testant la vérité de chaque élément jusqu'à ce qu'il trouve une valeur véridique ou vérifie chaque élément.
Remarque: Le dernier exemple utilise la fonction intégrée de Python carte()
, qui renvoie un itérateur dans lequel chaque élément est le résultat du passage du caractère suivant de la chaîne à str.isdigit ()
. C'est un moyen utile d'utiliser tout()
pour des contrôles plus complexes.
Vous vous demandez peut-être si tout()
est simplement une version habillée de ou
. Dans la section suivante, vous apprendrez les différences entre ces outils.
Comment faire la distinction entre ou
et tout()
Il existe deux différences principales entre ou
et tout()
en Python:
- Syntaxe
- Valeur de retour
Tout d'abord, vous découvrirez comment la syntaxe affecte la convivialité et la fiabilité de chaque outil. Deuxièmement, vous apprendrez les types de valeurs que chaque outil renvoie. Connaître ces différences vous aidera à décider quel outil est le mieux adapté à une situation donnée.
Syntaxe
ou
est un opérateur, il prend donc deux arguments, un de chaque côté:
>>> Vrai ou Faux
Vrai
tout()
, d'autre part, est une fonction qui prend un argument, un itérable d'objets qu'il parcourt pour évaluer la véracité:
>>> tout((Faux, Vrai))
Vrai
Cette différence de syntaxe est importante car elle affecte la convivialité et la lisibilité de chaque outil. Par exemple, si vous avez un itérable, vous pouvez le passer directement à tout()
. Pour obtenir un comportement similaire de ou
, vous devez utiliser une boucle ou une fonction comme réduire()
:
>>> importation functools
>>> functools.réduire(lambda X, y: X ou y, (Vrai, Faux, Faux))
Vrai
Dans l'exemple ci-dessus, vous avez utilisé réduire()
passer un itérable comme argument à ou
. Cela pourrait être fait beaucoup plus efficacement avec tout
, qui accepte directement les itérables comme arguments.
Pour illustrer une autre façon dont la syntaxe de chaque outil affecte sa convivialité, imaginez que vous voulez éviter de tester une condition si une condition précédente est Vrai
:
def sait_python(demandeur):
impression(F"Déterminer si demandeur['name'] connaît Python ... ")
revenir "python" dans demandeur[[[["langages de programmation"]
def is_local(demandeur):
impression(F"Déterminez si demandeur['name'] vit près du bureau ... ")
devrait_interview = sait_python(demandeur) ou is_local(demandeur)
Si is_local ()
prend un temps relativement long à exécuter, alors vous ne voulez pas l'appeler quand sait_python ()
est déjà revenu Vrai
. C'est appelé paresseux évaluation, ou court-circuit évaluation. Par défaut, ou
évalue les conditions paresseusement, alors que tout
ne fait pas.
Dans l'exemple ci-dessus, le programme n'aurait même pas besoin de déterminer si Susan est locale car elle a déjà confirmé qu'elle connaissait Python. C'est assez bien pour planifier une entrevue. Dans cette situation, appeler des fonctions paresseusement avec ou
serait l'approche la plus efficace.
Pourquoi ne pas utiliser tout()
au lieu? Vous avez appris plus haut que tout()
prend un itérable comme argument et Python évalue les conditions en fonction du type itérable. Donc, si vous utilisez une liste, Python exécutera les deux sait_python ()
et is_local ()
lors de la création de cette liste avant d'appeler tout()
:
devrait_interview = tout([[[[sait_python(demandeur), is_local(demandeur)])
Ici, Python appellera is_local ()
pour chaque candidat, même pour ceux qui connaissent Python. Parce que is_local ()
prendra beaucoup de temps à exécuter et est parfois inutile, il s'agit d'une implémentation inefficace de la logique.
Il existe des moyens de rendre les fonctions d'appel Python paresseuses lorsque vous utilisez des itérables, comme la construction d'un itérateur avec carte()
ou en utilisant une expression de générateur:
tout((répond à_criteria(demandeur) pour demandeur dans candidats))
Cet exemple utilise une expression de générateur pour générer des valeurs booléennes indiquant si un candidat répond aux critères d'un entretien. Une fois qu'un candidat satisfait aux critères, tout()
reviendra Vrai
sans vérifier les candidats restants. Mais gardez à l'esprit que ces types de solutions de contournement présentent également leurs propres problèmes et peuvent ne pas être appropriés dans toutes les situations.
La chose la plus importante à retenir est que la différence syntaxique entre tout()
et ou
peut affecter leur utilisabilité.
La syntaxe n'est pas la seule différence qui affecte la convivialité de ces outils. Ensuite, examinons les différentes valeurs de retour pour tout()
et ou
et comment ils pourraient influencer votre décision sur l'outil à utiliser.
Valeur de retour
Python tout()
et ou
renvoie différents types de valeurs. tout()
renvoie un booléen, qui indique s'il a trouvé une valeur véridique dans l'itérable:
Dans cet exemple, tout()
trouvé une valeur véridique (l'entier 1
), il a donc renvoyé la valeur booléenne Vrai
.
ou
, en revanche, renvoie la première valeur véridique qu'il trouve, qui ne sera pas nécessairement un booléen. S'il n'y a pas de valeurs vraies, alors ou
renvoie la dernière valeur:
>>> 1 ou 0
1
>>> Aucun ou 0
0
Dans le premier exemple, ou
évalué 1
, qui est véridique, et l'a retourné sans évaluer 0
. Dans le deuxième exemple, Aucun
est faux, alors ou
évalué 0
ensuite, ce qui est également faux. Mais comme il n'y a plus d'expressions à vérifier, ou
renvoie la dernière valeur, 0
.
Lorsque vous décidez quel outil utiliser, il est utile de considérer si vous voulez connaître les réel valeur de l'objet ou simplement si une valeur véridique existe quelque part dans la collection d'objets.
Conclusion
Toutes nos félicitations! Vous avez appris les tenants et les aboutissants de l’utilisation tout()
en Python et les différences entre tout()
et ou
. Avec une compréhension plus approfondie de ces deux outils, vous êtes bien préparé à choisir entre eux dans votre propre code.
Vous savez maintenant:
- Comment utiliser
tout()
en Python - Pourquoi utiliser
tout()
au lieu deou
Si vous souhaitez continuer à découvrir les expressions conditionnelles et comment utiliser des outils comme ou
et tout()
en Python, vous pouvez alors consulter les ressources suivantes:
[ad_2]