Définition
Ouvrez n'importe quel fichier Python et vous verrez une suite de lignes, chacune correspondant à une action précise. Pour exécuter ce programme dans le bon ordre, Python a besoin de savoir où une action commence et où elle s'arrête. C'est exactement le rôle de l'instruction : elle découpe le code en actions distinctes, que l'interpréteur traite l'une après l'autre.
Une affectation, un appel de fonction, un return, un import sont autant d'instructions différentes, mais elles partagent toutes la même règle d'écriture : une par ligne, sans ponctuation de fin. Voici quatre d'entre elles, chacune faisant une chose différente :
total = 0 # affectation : crée la variable
total += prix # affectation composée : la met à jour
print(total) # appel : affiche sa valeur
del total # suppression : efface la variableCette mise en page n'est pas un détail esthétique. Le point-virgule existe en Python et permettrait techniquement d'aligner plusieurs instructions sur une même ligne, mais aucun projet sérieux ne s'en sert : une instruction par ligne fait partie de l'identité du langage, exactement comme l'indentation. La suite de cette fiche explique comment reconnaître une instruction et comment plusieurs d'entre elles s'assemblent en blocs.
Instruction ou expression
Un débutant qui écrit if x = 5: obtient une erreur qui ne parle pas toujours d'elle-même : Python refuse le signe égal simple à cet endroit précis. La raison tient dans une distinction qui explique la plupart des SyntaxError des premières semaines : une expression produit une valeur, une instruction fait quelque chose. 2 + 2 est une expression, elle vaut 4 et peut être utilisée partout où une valeur est attendue. x = 2 + 2 est une instruction, elle affecte cette valeur à un nom et ne vaut rien par elle-même.
Le tableau suivant place côte à côte des écritures qui se ressemblent, pour situer la frontière entre les deux :
| Écriture | Nature |
|---|---|
prix * 1.2 | Expression, produit une valeur |
total = prix * 1.2 | Instruction, affecte cette valeur |
if prix > 10: | Instruction composée, ouvre un bloc |
len(articles) | Expression, appel qui rend un résultat |
Cette frontière a une conséquence directe : une instruction ne peut jamais se glisser là où une expression est attendue. C'est elle qui interdit d'écrire x = (return 5) ou de placer une affectation à l'intérieur d'une condition, et c'est elle qui, en écartant le signe égal simple, protège du grand classique venu des autres langages.
Un appel comme print(total) ressemble à une instruction mais reste une expression : il rend toujours une valeur, ici None. Écrire x = print(total) affiche bien le nombre à l'écran, mais range None dans x, jamais la valeur affichée.
Les instructions composées
Certaines instructions ne tiennent pas sur une seule ligne : elles ouvrent un espace où d'autres instructions viennent se ranger. Un if qui teste une condition doit bien exécuter quelque chose quand elle est vraie, et ce quelque chose est lui-même fait d'instructions. Ces instructions composées se reconnaissent à leur ligne d'en-tête terminée par deux-points, suivie d'un bloc indenté : if, for, while, try, def, class, with.
Oublier les deux points en fin de ligne d'en-tête est l'erreur de syntaxe la plus commise en début d'apprentissage. Tant que ce signe manque, Python refuse d'exécuter le fichier entier, pas seulement la ligne concernée.
Reste une question : que faire quand le bloc n'a rien à contenir, par exemple pendant qu'on esquisse la structure d'un programme avant de la remplir ? Un bloc ne peut jamais rester vide, et laisser les deux points sans suite provoque une erreur. C'est pour cette situation précise qu'existe l'instruction pass : elle ne fait rien, mais elle occupe la place et rend le fichier valide le temps d'écrire le reste.
Les instructions simples les plus courantes
À l'inverse des précédentes, les instructions simples tiennent sur une ligne et n'ouvrent aucun bloc. Un programme Python en contient bien plus que d'instructions composées, et les reconnaître suffit à lire la majorité du code déjà écrit :
| Instruction | Ce qu'elle fait |
|---|---|
x = 5 | Crée ou réaffecte une variable |
return | Termine une fonction et renvoie une valeur |
import | Rend un module disponible |
raise | Lève une exception |
del | Supprime un nom ou un élément |
assert | Vérifie une hypothèse pendant le développement |
break, continue | Modifient le déroulement d'une boucle |
| pass | Ne fait rien, mais occupe un bloc |
Questions fréquentes
Faut-il un point-virgule à la fin d'une ligne ?
Non, jamais en Python. Le retour à la ligne suffit à terminer une instruction. Ajouter un point-virgule ne provoque aucune erreur, mais signale immédiatement une habitude venue d'un autre langage, et les relecteurs le remarquent tout de suite.
Comment écrire une instruction trop longue pour une ligne ?
En s'appuyant sur les parenthèses, crochets ou accolades déjà présents dans l'instruction : tant qu'ils ne sont pas refermés, Python continue de lire la ligne suivante sans se plaindre. C'est la méthode recommandée, bien avant la barre oblique inverse en fin de ligne, qui reste possible mais se casse facilement à la moindre modification.
Peut-on mettre plusieurs instructions sur une ligne ?
Techniquement oui, avec un point-virgule, et aussi pour un bloc d'une seule ligne écrit juste après un deux-points. Les deux écritures fonctionnent, mais elles nuisent à la lisibilité, et les outils de formatage automatique les défont sans même demander l'avis de qui les a écrites.