Python >> Tutoriel Python >  >> Python

Python une ligne si sans autre

Fabriquer de magnifiques one-liners en Python est autant un art qu'une science. Dans ce didacticiel, vous apprendrez à compresser une instruction if sans branche else en une seule ligne de code Python.

Problème :Quel est l'équivalent sur une ligne de la simple instruction if sans branche else ?

Voici un exemple :

condition = True

if condition:
    print('hi')

# hi

Vous voudrez peut-être (i) imprimer quelque chose, (ii) attribuer une valeur à une variable, ou (iii) ajouter un élément à une liste si la condition est remplie.

Dans cet article, je vais vous montrer quatre méthodes pour atteindre cet objectif. Les quatre méthodes sont généralement applicables et vous pouvez facilement les personnaliser en fonction de votre application spécifique.

Passons rapidement en revue les quatre méthodes de notre shell de code interactif :

Exercice :Exécutez le code pour les deux True et False les conditions. Toutes les méthodes sont-elles sémantiquement équivalentes ?

Méthode 1 :instruction If sur une ligne

La première est également la méthode la plus simple :si vous voulez une ligne sans instruction else, écrivez simplement l'instruction if sur une seule ligne ! Il existe de nombreuses astuces (comme l'utilisation du point-virgule) qui vous aident à créer des instructions à une ligne. Mais pour un corps if avec une seule instruction, c'est aussi simple que d'éviter le saut de ligne.

condition = True

# Method 1: One-Liner If
if condition: print('hi')
# hi

Cette méthode est parfaitement valide et vous avez pu le voir dans la pratique. Pourtant, je dois mentionner qu'il "viole" la norme PEP8 (instructions multiples sur une seule ligne ). Par conséquent, vous ne devriez pas considérer cela comme du code Pythonic (il y a cependant pire sous le soleil).

Méthode 2 :Ternaire avec Branche Else Jetable

Bien sûr, vous pouvez également utiliser l'opérateur ternaire :

Si vous avez besoin d'un rappel rapide sur l'opérateur ternaire, consultez mon article de blog détaillé. L'opérateur ternaire est couramment utilisé pour attribuer des valeurs de manière conditionnelle. Mais vous pouvez également jeter la valeur de retour en n'attribuant le résultat à aucune variable. Dans ce cas, peu importe si vous utilisez None ou toute autre valeur de retour "factice" comme résultat de la branche else :

condition = True

# Method 2: Ternary with Dummy
print('hi') if condition else None

C'est lisible, court et concis et j'aime ça (enfin, je suis peut-être un peu biaisé en tant qu'auteur du livre Python One-Liners). Bien sûr, les gens vous demanderont pourquoi vous ne l'avez pas écrit sur plusieurs lignes. Mais où est le plaisir là-bas ?

Méthode 3 :Ternaire avec valeur par défaut pour l'affectation

Si vous devez affecter une valeur conditionnellement à une variable, mais que vous souhaitez le faire sans branche else, vous pouvez procéder comme suit :

condition = True

# Method 3: Ternary with Dummy for Assignment
x = 42 if condition else None

Si la condition n'est pas vérifiée, la valeur "factice" None est affecté à la variable.

Méthode 4 :Court-circuit

Cette méthode me plaît le plus. Il utilise une optimisation Python appelée "court-circuit" pour les opérateurs booléens :le and logique L'opérateur renvoie simplement le deuxième opérande si le premier est True . Il n'y a pas de conversion booléenne du deuxième opérande, il est simplement renvoyé tel quel.

Si le premier opérande est False , le deuxième opérande n'est même pas évalué.

Vous pouvez l'utiliser pour exécuter conditionnellement la branche if print('hi') ou toute autre fonction de code.

condition = True

# Method 4: Short circuiting
condition and print('hi')

Il y a deux options :

  • condition == True :Comme le premier opérande est True , le deuxième opérande est renvoyé. Ainsi, l'instruction print('hi') est exécuté et la chaîne hi apparaît à l'écran.
  • condition == False :Comme le premier opérande est False , le deuxième opérande n'est même pas évalué car le résultat du and logique l'opération est False De toute façon. Ainsi, l'instruction print('hi') n'est jamais exécuté.