Introducción
Se trata de una pequeña guía con el objetivo de dar a conocer las palabras reservadas o keywords de Python, aquellos nombres que incorpora el lenguaje los cuales no pueden ser reemplazados por un valor determinado (funciones, clases, variables) o alterar su funcionamiento.
En las versiones 2.x el lenguaje cuenta con 31 palabras reservadas:
and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield
En Python 3 las palabras exec
y print
han sido removidas, ya que ahora se presentan como funciones incorporadas por defecto. Por el contrario, se han añadido los términos async
, await
, nonlocal
, True
, False
y None
. Los últimos tres ya se encontraban en versiones anteriores a la 3.x, aunque como variables con valores predefinidos (a excepción de None
). async
y await
solo están disponibles a partir de Python 3.5. Veamos algunos ejemplos.
Python 2
>>> False = 1 >>> True = 0 >>> print = 0 File "<stdin>", line 1 print = 0 ^ SyntaxError: invalid syntax >>> exec = 0 File "<stdin>", line 1 exec = 0 ^ SyntaxError: invalid syntax >>> None = 0 File "<stdin>", line 1 SyntaxError: cannot assign to None
Python 3
>>> False = 1 File "<stdin>", line 1 SyntaxError: can't assign to keyword >>> True = 0 File "<stdin>", line 1 SyntaxError: can't assign to keyword >>> print = 0 >>> exec = 0 >>> None = 0 File "<stdin>", line 1 SyntaxError: can't assign to keyword
Esto incluye el conjunto de incompatibilidades que se presenta entre ambas versiones. En ninguna de ellas puede asignarse un valor a None
. Sin embargo, la diferencia radica en que en la rama 2.x es un objeto al que no puede asignarse un valor; en Python 3, una palabra reservada.
Por lo tanto, la lista de keywords en Python 3 resulta ser la siguiente.
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
El módulo keyword
El archivo keyword.py
se distribuye junto con la librería estándar de Python. Es generado automáticamente a partir del archivo graminit.c
, perteneciente al código de fuente del intérprete. Incorpora una lista que contiene el conjunto de palabras resevadas, y una simple función que determina la existencia de un keyword a partir de una cadena.
>>> from keyword import iskeyword, kwlist >>> kwlist ['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'] >>> iskeyword("pass") True >>> iskeyword("None") True >>> iskeyword("print") False
Documentación
La función incorporada help()
puede recibir como argumento el nombre de una palabra reservada como una cadena. Por ejemplo:
>>> help("assert")
A continuación explicamos brevemente el comportamiento de cada una de ellas.
async
/ await
async
se emplea para definir una función como asincrónica.
async def f(): pass
await
solo puede ser invocado desde una función asincrónica y sobre otra función de esta índole. Pausa la ejecución de aquella hasta que el resultado de esta esté disponible.
import asyncio async def f(): await asyncio.sleep(1)
and
/ or
Representaciones lógicas de «y» y «ó», respectivamente.
>>> True and False False >>> True and True True >>> False and False False >>> True or False True >>> True or True True >>> False or False False
as
Su función es dual. Puede utilizarse al momento de importar un determinado objeto de un módulo, para asignar un nombre diferente.
from keyword import kwlist as keyword_list
Además, se utiliza la siguiente sintaxis para asignar información de una excepción a un determinado objeto.
>>> try: ... sin_definir ... except NameError as e: ... print(e) ... name 'sin_definir' is not defined
assert
Durante la depuración (si __debug__
es True
), assert
permite especificar una expresión que lanzará AssertionError
en caso de ser evaluada como falsa.
>>> assert 1 == 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError >>> assert 1 == 1
Nótese que no es posible asignar un valor a __debug__
, éste será False
al llamar a un archivo con las opciones del intérprete -o
y -oo
.
break
Finaliza la ejecución de un bucle.
>>> while True: ... break ... >>> for i in range(10): ... if i == 4: ... break ... else: ... print(i) ... 0 1 2 3
class
Define una clase.
>>> class C: ... def __init__(self): ... print("Hello world!") ... >>> c = C() Hello world!
continue
Suspende la ejecución de un bucle para resumirla con el siguiente elemento.
>>> for i in range(10): ... if i == 4: ... continue ... else: ... print(i) ... 0 1 2 3 5 6 7 8 9
También aplicable a bucles while
.
def
Define una función.
>>> def func(a): ... print(a) ... >>> func("Hello world!") Hello world!
del
En caso de utilizarse seguido de un objeto, elimina su referencia.
>>> a = 1 >>> a 1 >>> del a >>> a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
En diccionarios, remueve el elemento del mismo. En listas, además, reordena el conjunto de elementos para llenar el espacio vacío.
>>> d = {"Yes": 1, "No": 2} >>> d["Yes"] 1 >>> del d["Yes"] >>> d["Yes"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Yes' >>> d {'No': 2}
>>> L = ["Yes", "No"] >>> L[0] 'Yes' >>> del L[0] >>> L[0] 'No' >>> L ['No']
exec
Permite ejecutar código Python a partir de una cadena o archivo.
>>> exec "a = 1" >>> a 1
Su utilización no es recomendada. Véase más información en la documentación oficial.
Únicamente en versiones anteriores a Python 3.x. A partir de esta última, exec()
es una función incorporada por defecto.
for
Permite recorrer los elementos de un objeto iterable (listas, tuplas, diccionarios, etc.).
>>> for i in (1, 2, 3): ... print(i) ... 1 2 3
from
Importa uno o más objetos de un modulo, prescindiendo del nombre de éste como prefijo al ser utilizado.
>>> from keyword import kwlist, iskeyword >>> iskeyword("assert") True
Si se quiere importar todos los objetos, puede utilizarse un asterisco.
from keyword import *
Aunque esta práctica no es recomendable.
Si se usa en conjunción con la palabra reservada yield
, tal como
yield from it
es equivalente a:
for i in it: yield i
global
Permite modificar el valor de un objeto global desde un ámbito con menor alcance (una función, por ejemplo).
>>> a = 1 >>> def f(): ... global a ... a = 2 ... >>> f() >>> a 2
El valor del objeto a
no habría sido modficiado sin utilizar global
; en su lugar, se habría creado otro objeto dentro de la función f
.
>>> a = 1 >>> def f(): ... a = 2 ... >>> f() >>> a 1
if
/ elif
/ else
if a: # bool(a) es True print("a") elif b: # bool(a) es False # bool(b) es True print("b") elif c: # bool(a) es False # bool(b) es False # bool(c) es True print("c") else: # Todas las anteriores son falsas. print("Ninguna de las anteriores.")
else
incluye un uso adicional (véase más adelante).
import
Importa un módulo, o bien un objeto de éste si es utilizado junto a from
.
>>> import keyword >>> keyword.iskeyword("assert") True
in
Determina la existencia de un determinado valor dentro de una lista, tupla, diccionario o cualquier objeto iterable.
>>> 2 in (1, 2, 3) True >>> "Hello" in "Hello, world!" True >>> "Si" in {"Yes": 1, "No": 2} False
is
Determina si dos objetos son iguales, a diferencia de los signos de equivalencia (==
), que determinan si ambos tienen el mismo valor.
>>> class Number: ... def __init__(self, number): ... self.number = number ... def __eq__(self, other): ... return self.number == other ... >>> a = Number(1) >>> b = Number(1) >>> a == b True >>> a is b False >>> c = b >>> b is c True
Siempre debe ser utilizado al comprar con None
.
>>> a = None >>> a is None True
lambda
Véase Funciones lambda.
nonlocal
Permite modificar el valor de un objeto que ha sido creado en un ámbito anterior.
>>> def a(): ... i = 1 ... def b(): ... nonlocal i ... i = 2 ... b() ... print(i) ... >>> a() 2
Sin el empleo de este vocablo no habría sido posible modificar el valor de i
desde b()
.
>>> def a(): ... i = 1 ... def b(): ... i = 2 ... b() ... print(i) ... >>> a() 1
Soportado únicamente en Python 3.
not
Operador lógico «no».
>>> not True False >>> not False True
pass
Esta palabra reservada carece de función alguna. Es utilizada para rellenar espacios requeridos por Python para evitar errores de sintaxis.
>>> def f(): ... pass ... >>> f()
print
Imprime en pantalla una determinada cadena. Otros objetos son convertidos automáticamente.
>>> print "Hello, world!" Hello, world! >>> print 1 1
Únicamente en versiones anteriores a Python 3.x. A partir de esta última, print()
es una función incorporada por defecto.
raise
Lanza una excepción.
>>> raise NameError Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError
return
Dentro de una función, especifica el valor de retorno.
>>> def f(): ... return 1 ... >>> f() 1
True
, False
y None
>>> True == 1 True >>> False == 0 True
None
es utilizado para indicar la ausencia de un valor en un objeto determinado.
Estos vocablos son palabras reservadas a partir de Python 3.
try
/ except
/ else
/ finally
Las cláusula try
/ except
permite capturar una excepción dentro de una determinada porción de código.
try: func() except Exception: print("Ha ocurrido un error.")
En caso de no habrse propagado ninguna excepción, el flujo del programa seguirá luego del término else
, en caso de encontrarse, al finalizar la ejecución de func()
.
try: func() except Exception: print("Ha ocurrido un error.") else: print("Ejecutado exitosamente.")
Por último, el flujo será enviado luego del término finally
al finalizar la ejecución del código anterior, independientemente si han surgido errores.
try: func() except Exception: print("Ha ocurrido un error.") else: print("Ejecutado exitosamente.") finally: cleanup()
En caso de ocurrir un error en las cláusulas except
o else
, cleanup()
será llamada antes de propagarse la excepción, para permitir realizar una limpieza, principal diferencia con el siguiente código.
try: func() except Exception: print("Ha ocurrido un error.") else: print("Ejecutado exitosamente.") cleanup()
while
Ejecuta un bloque de código mientras que la expresión sea verdadera.
>>> i = 0 >>> while i < 10: ... print(i) ... i = i + 1 ... 0 1 2 3 4 5 6 7 8 9
with
Permite encapsular la ejecución de un bloque de código, de modo que la inicialización y finalización de un objeto es realizada automáticamente por Python, utilizando las funciones __enter__
y __exit__
.
with open("info.txt"): raise Exception
En este caso, el archivo es cerrado automáticamente antes de propagarse la excepción. Puede indicarse un objeto que contenga una referencia a, en este caso, el fichero.
with open("info.txt") as f:
De esta manera, puede comprobarse su eficacia:
try: with open("info.txt") as f: raise Exception except Exception: print f.closed # True
Por el contrario, el siguiente código deja el fichero abierto.
try: f = open("info.txt") raise Exception f.close() except Exception: print f.closed # False
Véase PEP 343 – The «with» Statement para más información.
yield
Se comporta al igual que return
, con la diferencia que en lugar de retornar un único valor, retorna elementos que conforman un generador (un objeto iterable que puede recorrerse una vez, ya que el contenido no es almacenado en la memoria), por lo que puede emplearse múltiples veces en una misma función.
>>> def f(): ... yield 1 ... yield 2 ... yield 3 ... >>> g = f() >>> for i in g: ... print(i) ... 1 2 3 >>> for i in g: ... print(i) ...
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter
en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.
Charles says:
Muchas Gracias por el aporte, me ha aportado demasiado a mi carrera. Mil gracias
Cristian Borger says:
Excelente! me sirvió muchisimo y les deseo prosperidad, que tengan una excelente semana! Saludos desde Argentina!
Recursos Python says:
Hola Cristian. Me alegra que te haya servido! Saludos.