Comment utiliser any () en Python – Real Python

By | mars 30, 2020

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() et ou

Plongeons dedans!

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:

  1. Connaissez déjà Python
  2. Avoir cinq ans ou plus d'expérience en tant que développeur
  3. 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.

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.

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:

  1. Syntaxe
  2. 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 de ou

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: