Palabras reservadas del lenguaje



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 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). 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 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.

# Python 2.7
>>> from keyword import iskeyword, kwlist
>>> kwlist
['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']
>>> iskeyword("pass")
True
>>> iskeyword("None")
False
>>> iskeyword("print")
True

Documentación

La función help puede recibir como argumento el nombre de una palabra reservada como una cadena.

>>> help("assert")

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 quieren importar todos los objetos, puede utilizarse un asterisco.

from keyword import *
 
Aunque esta práctica no es recomendable.

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)
...



Deja un comentario