Python/Su primer programa en Python/Sangrado de código

De Wikilibros, la colección de libros de texto de contenido libre.

Índice de la sección
«Su primer programa en Python»


Las funciones de Python no tienen begin o end explícitos, ni llaves que marquen dónde empieza o termina su código. El único delimitador son dos puntos (:) y el sangrado del propio código.

Ejemplo 2.5. Sangrar la función buildConnectionString

 def buildConnectionString(params):
     """Crea una cadena de conexión partiendo de un diccionario de parámetros.
     Devuelve una cadena."""
     return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

Los bloques de código van definidos por su sangrado. Con «bloque de código» quiero decir funciones, sentencias if, bucles for, while, etc. El sangrado comienza un bloque y su ausencia lo termina. No hay llaves, corchetes ni palabras clave explícitas. Esto quiere decir que el espacio en blanco es significativo y debe ser consistente. En este ejemplo el código de la función (incluida la cadena de documentación) está sangrado a cuatro espacios. No tienen por qué ser cuatro, el único requisito es que sea consistente. La primera línea que no esté sangrada queda ya fuera de la función.

El siguiente ejemplo muestra un ejemplo de sangrado de código con sentencias if.

Ejemplo 2.6. Sentencias if

 def fib(n):                            #                           [1]
     print 'n =', n                     #                           [2]
     if n > 1:                          #                           [3]
         return n * fib(n - 1)
     else:                              #                           [4]
         print('fin de la línea')
         return 1
[1] Esta función llamada fib toma un argumento, n. Todo el código dentro de la función está sangrado.
[2] Imprimir en la pantalla es muy fácil en Python, basta usar print. Las sentencias print pueden tomar cualquier tipo de dato, incluyendo cadenas de texto, enteros, y otros tipos nativos como diccionarios y listas de los que oirá hablar en el siguiente capítulo. Puede incluso mezclarlos e imprimir varias cosas en una sola línea usando una lista de valores separados por comas. Cada valor se imprime en la misma línea, separado por espacios (las comas no se imprimen). Así que cuando se llama a fib con 5, imprime "n = 5".
[3] Las sentencias if son un tipo de bloque de código. Si la expresión de if se evalúa a un valor "verdadero" se ejecuta el código sangrado, y en caso contrario se ejecuta el bloque else.
[4] Por supuesto, los bloques if y else pueden contener varias líneas siempre que mantengan un sangrado consistente. Este bloque else tiene dos líneas de código dentro. No hay una sintaxis especial para bloques de código de varias líneas. Simplemente indéntelas y siga con su vida.

Tras protestar bastante al principio y hacer unas cuántas analogías despectivas con Fortran, llegará a reconciliarse con esto y empezará a ver los beneficios. Uno de los más significativos es que todos los programas en Python tienen un aspecto similar, ya que el sangrado no es una cuestión de estilo sino un requisito del lenguaje. Esto hace más sencilla la lectura y comprensión de código en Python escrito por otras personas.

Nota: Python utiliza retornos de carro para separar sentencias y los dos puntos y el sangrado para reconocer bloques de código. C++ y Java usan punto y coma para separar sentencias, y llaves para indicar bloques de código.

Lecturas complementarias sobre el sangrado de código