Introduction
Dans ce laboratoire, vous explorerez les concepts fondamentaux des mots réservés (reserved words) et des noms prédéfinis (pre-defined names) de Python. Premièrement, vous apprendrez à identifier les mots-clés (keywords) de Python, qui sont des mots spéciaux ayant des significations spécifiques et qui ne peuvent pas être utilisés comme noms de variables ou de fonctions. Nous utiliserons le module intégré keyword pour les lister.
Ensuite, vous découvrirez les identifiants intégrés (built-in identifiers) de Python, tels que les fonctions et les constantes, qui sont toujours disponibles dans votre code. Enfin, vous verrez pourquoi il est crucial d'éviter d'utiliser les mots-clés et les identifiants intégrés pour vos propres noms afin de prévenir les erreurs et de maintenir votre code propre et fonctionnel.
Identifier les Mots-clés Python
Dans cette étape, vous allez découvrir les mots-clés (keywords) de Python. Les mots-clés, également appelés mots réservés (reserved words), sont les éléments fondamentaux de la syntaxe du langage. Ils ont des significations spéciales et ne peuvent pas être utilisés comme noms pour vos variables, fonctions ou tout autre identifiant.
Python fournit un module intégré appelé keyword qui facilite la visualisation de tous les mots-clés actuels. Écrivons un script pour les afficher.
Le fichier nécessaire, list_keywords.py, a déjà été créé pour vous. Localisez-le dans l'explorateur de fichiers sur le côté gauche du WebIDE et cliquez dessus pour l'ouvrir.
Maintenant, ajoutez le code suivant au fichier list_keywords.py :
import keyword
## L'attribut kwlist contient une liste de tous les mots-clés.
print(keyword.kwlist)
Après avoir enregistré le fichier, ouvrez le terminal intégré dans votre WebIDE. Vous pouvez le faire en cliquant sur Terminal -> New Terminal dans le menu supérieur.
Exécutez votre script en entrant la commande suivante dans le terminal :
python ~/project/list_keywords.py
Le résultat sera une liste de tous les mots-clés Python.
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
Il est important de se souvenir que ces mots sont réservés. Python est sensible à la casse (case-sensitive), donc bien que if soit un mot-clé, IF ne l'est pas. Cependant, il est recommandé d'éviter d'utiliser toute variation des mots-clés comme noms pour maintenir la clarté du code.
Explorer les Identifiants Intégrés de Python
Maintenant, explorons les identifiants intégrés (built-in identifiers) de Python. Ce sont des noms que Python pré-définit pour vous, incluant des fonctions courantes comme print(), des types de données comme int et str, ainsi que des exceptions. Ils sont toujours disponibles dans n'importe quel script Python sans nécessiter d'instruction import.
Vous pouvez visualiser une liste de tous les identifiants intégrés en utilisant la fonction dir() sur un objet spécial appelé __builtins__.
Ouvrez le fichier list_builtins.py depuis l'explorateur de fichiers. Ajoutez-y le code suivant :
## dir() retourne une liste des noms dans la portée __builtins__.
print(dir(__builtins__))
Enregistrez le fichier et exécutez le script depuis le terminal :
python ~/project/list_builtins.py
Vous verrez une longue liste de noms s'afficher dans la console. Ci-dessous se trouve une version tronquée du résultat :
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
Vous reconnaîtrez de nombreux noms utiles dans cette liste, tels que len, input, list et dict. Dans les étapes suivantes, nous verrons pourquoi vous devriez éviter d'utiliser ces noms pour vos propres variables.
Éviter d'Utiliser des Mots-clés comme Identifiants
Dans cette étape, vous allez voir ce qui se passe lorsque vous tentez d'utiliser un mot-clé Python comme nom de variable. Étant donné que les mots-clés sont réservés à la structure du langage, tenter d'assigner une valeur à l'un d'eux provoquera l'échec du programme avant même son exécution.
Démontrons cela en essayant d'utiliser le mot-clé with comme nom de variable.
Ouvrez le fichier keyword_error.py dans l'éditeur WebIDE. Ajoutez-y le code suivant, qui est intentionnellement incorrect :
## Ceci provoquera une erreur car 'with' est un mot-clé.
with = 5
print(with)
Enregistrez le fichier et essayez de l'exécuter depuis le terminal :
python ~/project/keyword_error.py
Python s'arrêtera immédiatement et signalera une SyntaxError.
File "/home/labex/project/keyword_error.py", line 2
with = 5
^^^^
SyntaxError: invalid syntax
Le message d'erreur SyntaxError: invalid syntax indique clairement que le code est structuré de manière incorrecte. Cela se produit parce que l'interpréteur Python reconnaît with comme un mot-clé qui devrait commencer une instruction with, et non comme un nom pouvant contenir une valeur. Cette règle s'applique à tous les mots-clés que vous avez listés lors de la première étape.
Éviter d'Écraser les Identifiants Intégrés
Contrairement aux mots-clés, Python ne vous empêche pas de réassigner des identifiants intégrés. Cependant, le faire est une source fréquente de bogues et doit être évité. Lorsque vous assignez une nouvelle valeur à un nom intégré, vous "masquez" sa fonctionnalité d'origine, ce qui peut entraîner des erreurs inattendues.
Voyons ce qui se passe lorsque nous écrasons la fonction intégrée print.
Ouvrez le fichier builtin_override.py dans l'éditeur WebIDE. Ajoutez le code suivant :
## Écraser la fonction print intégrée avec un entier.
print = 5
## Maintenant, essayez d'utiliser print() comme une fonction.
print("hello")
Enregistrez le fichier et exécutez-le depuis le terminal :
python ~/project/builtin_override.py
Cette fois, le script commence à s'exécuter mais échoue avec une TypeError.
Traceback (most recent call last):
File "/home/labex/project/builtin_override.py", line 5, in <module>
print("hello")
TypeError: 'int' object is not callable
L'erreur TypeError: 'int' object is not callable se produit parce que le nom print ne fait plus référence à la fonction d'impression intégrée. Il fait plutôt référence à l'entier 5. Comme vous ne pouvez pas "appeler" un entier comme une fonction (en utilisant des parenthèses), le programme plante.
Ceci démontre le danger d'écraser les fonctions intégrées. Cela peut casser votre code de manière non évidente et rendre le débogage difficile. Choisissez toujours des noms uniques et descriptifs pour vos variables et fonctions afin d'éviter ces conflits.
Résumé
Dans ce laboratoire, vous avez découvert deux catégories importantes de noms en Python : les mots-clés (keywords) et les identifiants intégrés (built-in identifiers). Vous avez utilisé le module keyword pour lister tous les mots-clés réservés de Python et avez constaté que tenter de les utiliser comme noms de variables entraîne une SyntaxError.
Vous avez également exploré la liste des identifiants intégrés et avez démontré les problèmes qui surviennent en les écrasant, ce qui peut conduire à des TypeError et d'autres problèmes d'exécution (runtime issues). Le point essentiel à retenir est de toujours choisir des noms uniques et descriptifs pour vos variables et fonctions, en évitant à la fois les mots-clés et les noms intégrés pour garantir que votre code soit robuste, lisible et exempt de conflits.



