Es un conjunto de principios breves y sencillos que definen el diseño y la funcionalidad de Python. ¡Te explicamos cada uno con ejemplos!

Los 20 principios del Zen de Python explicados con ejemplos

pablo.blanco
08/07/2024

El Zen de Python (también llamado PEP 20) son un conjunto de principios breves y sencillos que definen el diseño y la funcionalidad de Python como lenguaje de programación. Estos 20 principios encierran en sí mismos una filosofía de programación y de trabajo que se gestó en la cabeza de Tim Peters, un desarrollador de software que contribuyó enormemente al que hoy día es uno de los lenguajes de programación más versátiles y utilizados.

Con Python podemos hacer muchas cosas: analizar datos, crear un sistema de inteligencia artificial, desarrollar un sitio web, programar un software, y mucho más. Pero el Zen de Python no trata de las potencialidades de Python, sino de los fundamentos que lo subyacen independientemente de su aplicación.

¿Cómo ver el Zen de Python?

Para visualizar el Zen de Python, puedes utilizar el siguiente comando en una consola interactiva de Python:

# Zen de Python

import this

Este comando imprimirá una lista de principios que guían el diseño del lenguaje Python, conocidos como el Zen de Python. Si prefieres hacerlo desde un script de Python, simplemente incluye la misma línea en tu código y ejecútalo.

Aquí tienes un ejemplo de cómo se vería:

# script.py

import this

Al ejecutar el script (python script.py), verás el Zen de Python en la salida de la consola.

Los 19 principios del Zen de Python con ejemplos

Te explicamos brevemente el significado de cada uno de los principios del Zen de Python y te ponemos un pequeño ejemplo aclaratorio: 

Bello es mejor que feo

El código debe ser estéticamente agradable y fácil de leer.

# Código feo

x= [1,2,3]
y = [4, 5,6] z=x+y


# Código hermoso

lista_1 = [1, 2, 3]
lista_2 = [4, 5, 6]
lista_comb = lista_1 + lista_2

Explícito es mejor que implícito

Las decisiones en el código deben ser claras y evidentes.

# Implícito

from math import *


# Explícito

from math import sqrt, sin, cos

Simple es mejor que complejo

Prefiere soluciones simples a las complicadas.

# Complejo

def suma(a, b): return a + b


# Simple

def suma(a, b):
return a + b

Complejo es mejor que complicado

Si la solución necesita ser compleja, que no sea complicada innecesariamente.

# Complicado

def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)


# Complejo pero claro

def factorial(n):
resultado = 1
for i in range(1, n + 1):
resultado *= i
return resultado

Plano es mejor que anidado

Evita demasiados niveles de anidamiento.

# Anidado

for i in range(3):
for j in range(3):
print(i, j)


# Plano

for i in range(3):
print(i, 0)
print(i, 1)
print(i, 2)

Disperso es mejor que denso

Prefiere código que no esté apiñado, con suficiente espacio para ser legible.

# Denso

a=1;b=2;c=3


# Plano

a = 1
b = 2
c = 3

La legibilidad cuenta

Es crucial que el código sea fácil de leer y entender.

# Menos legible

def f(x): return x**2 + 2*x + 1


# Más legible

def cuadrado_mas_doble(x):
return x**2 + 2*x + 1

Los casos especiales no son tan especiales como para romper reglas

No modifiques los principios del Zen de Python por casos excepcionales.

# Caso especial que rompe la regla

if x == 1: print("Uno")
else:
if x == 2:
print("Dos")


# Sigue la regla

if x == 1:
print("Uno")
elif x == 2:
print("Dos")

Aunque lo práctico gana a lo puro

En caso de conflicto, opta por soluciones prácticas en lugar de teóricas.

# Puro pero poco práctico

def buscar_elemento(lista, elemento):
if elemento in lista:
return True
return False


# Práctico

def buscar_elemento(lista, elemento):
return elemento in lista

Los errores nunca deberían dejarse pasar silenciosamente

Deben solventarse los errores lo antes posible y de forma eficiente

# Error

try:
x = 1 / 0
except:
pass
return False


# Manejo de errores

try:
x = 1 / 0
except
ZeroDivisionError:
print("No se puede dividir por cero.")

A menos que hayan sido silenciados explícitamente

Si decides ignorar errores, hazlo de forma clara y justificada.

#Error

try:
x = 1 / 0
except ZeroDivisionError:
pass # Error conocido y manejado de forma explícita

Frente a la ambigüedad, no intentes adivinar

Evita suposiciones en el código; sé claro y explícito.

#Ambiguo

def procesar(datos):
# ¿Qué hace esta función? pass


# Claro

def procesar_lista_de_numeros(lista_de_numeros):
# Procesa la lista de números sumándolos
return sum(lista_de_numeros)

Debería haber una sola manera de hacerlo

Para cualquier tarea, debería haber una manera clara y preferida de hacerlo.

# Manera alternativa

a = len([1, 2, 3])
b = [1, 2, 3].__len__()


# Una manera obvia

a = len([1, 2, 3])

Aunque esa manera puede no parecer obvia al principio

Algunas soluciones pueden no ser evidentes para todos, pero siguen siendo las preferidas.

Ahora es mejor que nunca

Es mejor hacer algo ahora que posponerlo indefinidamente.

Aunque es mejor no ir con prisas

A veces es mejor no hacer algo apresuradamente, pues podríamos meternos en un embrollo todavía más profundo.

Si es difícil de explicar, es mala idea

Si no puedes explicar fácilmente cómo funciona tu código, probablemente sea una mala solución.

Si es fácil de explicar, puede que sí sea buena idea

Si puedes explicar claramente tu código, es probable que sea una buena solución (¡pero no siempre!).

Los namespaces son una gran idea

Usa namespaces para organizar mejor todo el código y estructurarlo con claridad.

# Sin espacio de nombres

valor = 1


# Con espacio de nombres

class MiClase:
valor = 1

¿Cuál es el principio 20 del Zen de Python?

Nadie sabe cuál es el vigésimo principio del Zen de Python, puesto que nadie lo ha escrito todavía. Si bien se dice que son 20 principios, solo se conocen 19. El último, escríbelo tú.

Artículos relacionados

La estadística puede utilizarse de forma engañosa. En este artículo te contamos los sesgos estadísticos más comunes.
pablo.blanco

¿Los datos mienten? Estos son los sesgos estadísticos que más te engañan

09/01/2024

Vamos a empezar el artículo con una gran verdad: la estadística, aunque represente datos discutiblemente exactos, puede utilizarse de forma engañosa. Hasta la más exacta de las ope

Actúa como un intermediario entre el código máquina y los lenguajes de alto nivel. ¡Descubre mucho más con nosotros!

¿Qué es el lenguaje ensamblador (ASM)?

05/12/2023

El lenguaje ensamblador actúa como un intermediario entre el código máquina y los lenguajes de alto nivel, ofreciendo una comunicación más directa c

Las tres leyes de la robótica son un conjunto de principios éticos y de seguridad aplicados a los robots y otros sistemas tecnológicos inteligentes.
pablo.blanco

Las tres leyes de la robótica de Isaac Asimov: aplicaciones actuales

03/07/2024

Las tres leyes de la robótica son un conjunto de principios éticos y de seguridad aplicados a los robots y otros sistemas tecnológicos inteligentes que inventó el afamado