En comparación con lenguajes como Perl, Python tiene un número limitado de construcciones de control:
- única
if
y no hay unless
,
- solo
for
que itera sobre secuencias y no foreach
o estilo C for
,
- solo
while
eso comprueba una condición en cada bucle y no do-while
,
- única
if-elif
y no hay switch
,
- solo hay una construcción de comentario, el
#
, y para cada línea puedes decir si está comentado o no, sin mirar las líneas anteriores.
Además, hay casi una forma de sangrar su fuente; La mayoría de los casos de sangría creativa se excluyen sintácticamente.
Esto hace que analizar una fuente de Python sea más fácil para los humanos.
Hay intentos de ser mínimos pero completos en los tipos integrados y en la biblioteca estándar.
- para la lista mutable, usa el único tipo incorporado
list
; es O (1) para la mayoría de las operaciones, y nunca tiene que elegir la implementación correcta,
- para listas inmutables, igualmente, solo usa el
tuple
tipo,
- para los mapas, usa el único incorporado
dict
que es muy eficiente en la mayoría de los casos, sin necesidad de considerar qué implementación usar.
Python 3 extiende esto a los enteros: no importa qué tan grande sea su entero, usted usa el mismo tipo y nunca le importa la coerción.
Python intenta evitar el azúcar sintáctico. Pero a veces agrega azúcar sintáctico solo para hacer obvio el camino obvio. Puede escribir en if foo is not None
lugar de if not (foo is None)
porque 'no es' está en mayúsculas especiales. Todavía se foo is not None
lee fácilmente, no se puede malinterpretar, y no tienes que pensar, solo escribes lo obvio.
Por supuesto, la mayoría de las cosas más complejas en Python se pueden hacer de varias maneras. Puede agregar métodos a las clases por declaración o por asignación simple de ranuras, puede pasar argumentos a las funciones de varias maneras creativas, etc. Eso es solo porque los aspectos internos del lenguaje están expuestos en su mayoría.
La clave es que siempre hay una manera que pretende ser la mejor, el caso de cubrir todo. Si existen otras formas, no se agregaron como alternativas iguales (como if
y unless
) sino que simplemente exponen el funcionamiento interno. Lenta pero constantemente, tales alternativas quedan obsoletas (¡no se eliminan!) Al mejorar el mejor mecanismo conocido.
Los decoradores envuelven las llamadas de función AOP. Antes de 2.6, tenía que usar el __metaclass__
miembro mágico para declarar la metaclase de una clase; ahora también puede usar la misma sintaxis de decorador para esto. Antes de 3.0, tenía dos tipos de cadenas, orientadas a bytes y Unicode, que podía mezclar inadvertidamente. Ahora tiene el único Unicode str
y el único binario transparente bytes
, que no puede mezclar por error.
"""
comentarios (docstrings). Estos abarcan varias líneas.