Python >> Tutoriel Python >  >> Python

Points-virgules Python :comment ils fonctionnent et pourquoi les haineux vous disent de les éviter

Chaque codeur Python déteste les points-virgules ; pour mettre fin à des déclarations .

Si vous êtes comme moi et que quelqu'un vous montre le code Python suivant, vous commencerez à vous demander si cette personne a confondu Python avec Java ou C++.

Exemple de point-virgule Python [One-Liner]

Voici comment utiliser le point-virgule :

x = 'hi'; y = 'young'; z = 'friend'; print(x, y, z);

Si vous exécutez cette ligne Python avec des points-virgules, vous obtiendrez le résultat suivant :

hi young friend

À première vue, cela ne ressemble même pas à du code Python ! C++ a des points-virgules. Java a des points-virgules. Mais Python est censé être un langage sans point-virgule, n'est-ce pas ?

Mème point-virgule Python

Eh bien, il s'avère que Python connaît le ; plutôt bien :

print(';')

La sortie :

;

CQFD

Signification du point-virgule Python

La signification du point-virgule dans les langages de programmation tels que Java et C++ est de terminer l'instruction en cours . Dans ces langues, vous l'utiliserez après chaque ligne. Sans cela, l'interprète pense que le code n'est pas encore terminé et il commence à en chercher plus. Tout codeur Java ou C++ connaît les situations où une erreur s'est produite parce qu'il a oublié d'utiliser un point-virgule dans son code.

En Python, cependant, les points-virgules ont une signification légèrement différente. Ils vous permettent de créer des déclarations dites composées. Le if construct est une instruction composée. Le for loop est une instruction composée. Et, un certain nombre d'instructions Python séparées par des points-virgules sont des instructions composées.

Par exemple, voici trois instructions Python :

print('a')
print('b')
print('c')

Compressons maintenant les trois mêmes instructions Python en une seule en utilisant le point-virgule pour créer une instruction composée :

print('a'); print('b'); print('c')

Code différent. Même résultat.

Python sans point-virgule

Dans de nombreux articles (ici et ici et ici), les codeurs Python recommandent PAS utiliser des points-virgules. Ils sont souvent considérés comme n'étant pas "Pythonic" . Pourquoi? Parce qu'ils sont considérés comme illisibles et inutiles. Le Zen de Python indique que le code Python doit être lisible :

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one – and preferably only one – obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea – let's do more of those!

La lisibilité compte ! Et :Parsemé vaut mieux que dense !

Les deux déclarations indiquent qu'il peut être préférable d'avoir une déclaration multiligne sans points-virgules qu'une instruction d'une seule ligne avec point-virgule.

Boucle for Python Point-virgule

Pouvez-vous utiliser le point-virgule en combinaison avec la boucle for ? Oui, vous pouvez! Mais seulement si toute l'instruction commence par la boucle for et que vous utilisez le point-virgule pour créer une instruction composée comme corps de boucle. Vous ne pouvez pas utiliser le point-virgule pour séparer une expression normale d'une boucle Python :

# ALLOWED
print('a'); print('b'); print('c')

# ALLOWED
for i in range(3): print('a'); print('b')

# NOT ALLOWED
print('a'); for i in range(3): print('b')

La troisième instruction renvoie une erreur de syntaxe :

Vous pouvez essayer vous-même dans notre shell Python interactif :

Exercice :Corrigez le code défectueux et vérifiez le résultat.

Point-virgule Python après la pause

Pouvez-vous utiliser un point-virgule après le mot-clé break ? La réponse est :oui, bien sûr. Vous pouvez utiliser le point-virgule presque partout. Cela n'a aucun sens de le faire cependant.

while True:
    if True:
        break;

print('hi')
# hi

Point-virgule de fin Python en fin de ligne

En Python, vous pouvez utiliser le point-virgule juste avant la fin de la ligne. Vous pouvez même terminer chaque ligne par un point-virgule :

print('hi');
name = 'Ann';
print(name);

Il n'y a qu'une seule application à laquelle je peux penser :embrouiller les lecteurs pour qu'ils se demandent quel langage de programmation vous utilisez. 😉

Syntaxe Python point-virgule invalide

Vous obtiendrez une erreur de syntaxe si vous essayez de séparer une instruction Python normale d'une instruction de bloc telle que la boucle for, la boucle while ou le bloc if :

# NOT ALLOWED
print('a'); for i in range(3): print('b')

Python renvoie une erreur de syntaxe. Il n'y a aucune raison à cela si ce n'est que c'est déroutant pour le lecteur. En fait, le code n'est pas ambigu dans ce cas, donc Python pourrait théoriquement le permettre. Mais cela ouvrirait la porte à des one-liners extrêmement imbriqués et déroutants qu'aucun codeur ne peut comprendre.

(Eh bien, j'adorerais utiliser cette fonctionnalité de toute façon pour créer des One-Liners Python encore plus avancés. Que puis-je faire ? Je les adore.)

Python Point-virgule Si

Vous pouvez utiliser le point-virgule pour compresser un corps multiligne en une seule ligne :

if 2+2 == 4: a = 4-2; print(a)
# 2

Encore une fois, vous ne pouvez pas utiliser le point-virgule pour séparer une instruction Python normale d'un bloc if :

a = 4-2; if 2+2 == 4: print(a)
# 2

Cela entraîne une erreur de syntaxe !

Python Point-virgule Lambda

Pouvez-vous utiliser le point-virgule dans une fonction lambda ? La réponse est non !

Mais vous pouvez définir une fonction simple sur une seule ligne, en séparant l'instruction de retour de certaines autres instructions de corps par le point-virgule :

def f(x): y = x+x; return x

Si vous imprimez un exemple d'exécution, vous verrez que Python n'a aucun problème avec cette instruction :

print(f(2))
# 2

Pour la fonction lambda, cela n'a pas de sens. Pourquoi? Parce que le "corps" de la fonction lambda calcule la valeur de retour de l'appel de fonction. Si vous aviez un point-virgule, vous créeriez plusieurs résultats, un pour chaque expression séparée par des points-virgules. On ne sait pas comment résoudre ce conflit ! Donc, naturellement, les créateurs de Python ont évité cette ambiguïté.

Résumé :Utilisation du point-virgule Python

Vous utiliserez le point-virgule principalement pour écrire des one-liners Python. Voici quelques utilisations du point-virgule :

  • Pour écrire des one-liners Python juste pour le plaisir, si c'est vous, consultez mon livre "Python One-Liners" !
  • Pour écrire des one-liners Python à exécuter depuis votre ligne de commande.
  • Pour compresser des instructions triviales et économiser un peu d'espace, comme x=2; y=3 et vous n'aimez pas x, y = 2, 3 .
  • Pour passer les lignes simples dans le timeit fonction et mesurer le temps d'exécution écoulé.