Palabras Clave e Identificadores Integrados en Python

PythonBeginner
Practicar Ahora

Introducción

En este laboratorio, explorará los conceptos fundamentales de las palabras reservadas y los nombres predefinidos de Python. Primero, aprenderá a identificar las palabras clave (keywords) de Python, que son palabras especiales con significados específicos que no pueden utilizarse como nombres de variables o funciones. Utilizaremos el módulo integrado keyword para listarlas.

A continuación, descubrirá los identificadores integrados (built-in identifiers) de Python, como funciones y constantes, que están siempre disponibles en su código. Finalmente, verá por qué es crucial evitar el uso de palabras clave e identificadores integrados para sus propios nombres, con el fin de prevenir errores y mantener su código limpio y funcional.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 99%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Identificar Palabras Clave de Python

En este paso, aprenderá sobre las palabras clave (keywords) de Python. Las palabras clave, también conocidas como palabras reservadas, son los bloques de construcción fundamentales de la sintaxis del lenguaje. Tienen significados especiales y no pueden utilizarse como nombres para sus variables, funciones o cualquier otro identificador.

Python proporciona un módulo integrado llamado keyword que facilita la visualización de todas las palabras clave actuales. Escribamos un script para mostrarlas.

El archivo necesario, list_keywords.py, ya ha sido creado para usted. Localícelo en el explorador de archivos en el lado izquierdo del WebIDE y haga clic para abrirlo.

Ahora, añada el siguiente código al archivo list_keywords.py:

import keyword

## El atributo kwlist contiene una lista de todas las palabras clave.
print(keyword.kwlist)

Después de guardar el archivo, abra la terminal integrada en su WebIDE. Puede hacerlo haciendo clic en Terminal -> New Terminal en el menú superior.

Ejecute su script ejecutando el siguiente comando en la terminal:

python ~/project/list_keywords.py

La salida será una lista de todas las palabras clave de 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']

Es importante recordar que estas palabras están reservadas. Python distingue entre mayúsculas y minúsculas (case-sensitive), por lo que aunque if es una palabra clave, IF no lo es. Sin embargo, la mejor práctica es evitar usar cualquier variación de las palabras clave como nombres para mantener la claridad del código.

Explorar Identificadores Integrados de Python

Ahora, exploraremos los identificadores integrados (built-in identifiers) de Python. Estos son nombres que Python predefine para usted, incluyendo funciones comunes como print(), tipos de datos como int y str, y excepciones. Siempre están disponibles en cualquier script de Python sin necesidad de una declaración import.

Puede ver una lista de todos los identificadores integrados utilizando la función dir() sobre un objeto especial llamado __builtins__.

Abra el archivo list_builtins.py desde el explorador de archivos. Añada el siguiente código:

## dir() devuelve una lista de los nombres en el ámbito de __builtins__.
print(dir(__builtins__))

Guarde el archivo y ejecute el script desde la terminal:

python ~/project/list_builtins.py

Verá una larga lista de nombres impresa en la consola. A continuación, se muestra una versión truncada de la salida:

['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']

Reconocerá muchos nombres útiles en esta lista, como len, input, list y dict. En los siguientes pasos, veremos por qué debe evitar usar estos nombres para sus propias variables.

Evitar Usar Palabras Clave como Identificadores

En este paso, verá lo que sucede cuando intenta usar una palabra clave de Python como nombre de variable. Debido a que las palabras clave están reservadas para la estructura del lenguaje, intentar asignarles un valor hará que el programa falle incluso antes de ejecutarse.

Vamos a demostrar esto intentando usar la palabra clave with como nombre de variable.

Abra el archivo keyword_error.py en el editor del WebIDE. Añada el siguiente código, que es intencionalmente incorrecto:

## Esto causará un error porque 'with' es una palabra clave.
with = 5
print(with)

Guarde el archivo e intente ejecutarlo desde la terminal:

python ~/project/keyword_error.py

Python se detendrá inmediatamente e informará un SyntaxError.

  File "/home/labex/project/keyword_error.py", line 2
    with = 5
    ^^^^
SyntaxError: invalid syntax

El mensaje de error SyntaxError: invalid syntax indica claramente que el código está estructurado incorrectamente. Esto sucede porque el intérprete de Python reconoce with como una palabra clave que debería iniciar una declaración with, y no como un nombre que puede contener un valor. Esta regla se aplica a todas las palabras clave que enumeró en el primer paso.

Evitar Sobrescribir Identificadores Integrados

A diferencia de las palabras clave, Python no le impide reasignar identificadores integrados (built-in identifiers). Sin embargo, hacerlo es una fuente común de errores (bugs) y debe evitarse. Cuando asigna un nuevo valor a un nombre integrado, "oculta" su funcionalidad original, lo que puede provocar errores inesperados.

Veamos qué sucede cuando sobrescribimos la función integrada print.

Abra el archivo builtin_override.py en el editor del WebIDE. Añada el siguiente código:

## Sobrescribir la función print integrada con un entero.
print = 5

## Ahora, intentar usar print() como una función.
print("hello")

Guarde el archivo y ejecútelo desde la terminal:

python ~/project/builtin_override.py

Esta vez, el script comienza a ejecutarse pero falla con un 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

El error TypeError: 'int' object is not callable ocurre porque el nombre print ya no hace referencia a la función de impresión integrada. En su lugar, hace referencia al entero 5. Dado que no se puede "llamar" a un entero como si fuera una función (usando paréntesis), el programa falla.

Esto demuestra el peligro de sobrescribir los integrados. Puede romper su código de maneras no obvias y dificultar la depuración (debugging). Elija siempre nombres únicos y descriptivos para sus variables y funciones para evitar estos conflictos.

Resumen

En este laboratorio, aprendió sobre dos categorías importantes de nombres en Python: palabras clave (keywords) e identificadores integrados (built-in identifiers). Utilizó el módulo keyword para listar todas las palabras clave reservadas de Python y vio cómo intentar usarlas como nombres de variables resulta en un SyntaxError.

También exploró la lista de identificadores integrados y demostró los problemas que surgen al sobrescribirlos, lo que puede provocar TypeError y otros problemas en tiempo de ejecución (runtime issues). La conclusión clave es elegir siempre nombres únicos y descriptivos para sus variables y funciones, evitando tanto las palabras clave como los nombres integrados para asegurar que su código sea robusto, legible y libre de conflictos.