La Sintaxis de Python

Es bien conocido que uno de los rasgos distintivos de Python es su sintaxis clara y limpia, con estructuras que se asemejan mucho al idioma Inglés escrito y que facilitan el aprendizaje y la enseñanza del lenguaje.

Un programa escrito en Python se divide en un número determinado de líneas lógicas, cuyo final está determinado por el token o señal de nueva línea (NEWLINE). Los tokens son componentes lexicográficos elementales que forman cada una de las líneas lógicas. Una línea lógica puede estar compuesta por una o varias líneas físicas. Las líneas físicas son secuencias de caracteres que concluyen con el caracter de fin de línea. De esta forma, se va organizando el código, siguiendo reglas sintácticas fundamentales que constituyen la “Estructura Lexicográfica” del lenguaje y que gobiernan la forma en la que escribimos un programa en Python. Veamos en detalle algunas de estas reglas.

Reglas Generales de Sintaxis

  • Existen dos tipos de sentencias en Python: las simples y las compuestas. Las simples, deben completarse en una única línea lógica. Las compuestas, deben comenzar con una cláusula de sentencia compuesta y deben contener sentencias simples y/o compuestas indentadas, a las cuales se les suele llamar cuerpo o bloque. La cláusula inicial o encabezado de una sentencia compuesta inicia con una palabra clave (keyword) y termina con el caracter de dos puntos “:”. Un ejemplo de sentencia simple sería:

>>> from sys import platform

y de sentencia compuesta:

>>> if a > b:

... print(a, 'is larger')

A diferencia de otros lenguajes, Python no tiene declaraciones u otros elementos sintácticos de alto nivel, solo sentencias.

  • Una línea física termina con la secuencia de fin de línea, es decir: “\n” (En Windows se acepta “\r\n”). En Python, el fin de una línea física, generalmente determina el fin de la mayoría de las sentencias, además, es válido emplear el caracter punto y coma “;” para terminar las sentencias o para incluir varias sentencias simples en una mima línea física, aunque debemos decir que esta práctica no es muy empleada y recomendamos evitarla, pues atenta contra la legibilidad del código y queda fuera del estilo aceptado en Python

  • Un comentario comenzará con el caracter de numeral “#” y continúa hasta el fin de la línea física. Las líneas físicas que comienzan con “#” son ignoradas por el intérprete, lo que significa que estas líneas están dirigidas a los programadores/mantenedores/clientes del código, que en muchas ocasiones seremos nosotros mismos. Los comentarios son útiles para indicar lo que estamos haciendo, siempre y cuando no sea algo obvio, en cuyo caso resultan redundantes

  • La declaración de codificación (Encoding declaration) es un tipo especial de comentario que se incluye en la segunda línea (o primera) de un módulo Python para indicar explícitamente la codificación empleada en el archivo de texto que contiene el código. Un ejemplo de este tipo de declaración es:

# -*- coding: utf-8 -*-

En la mayoría de los casos este tipo de declaración no es necesaria, pues casi todos los IDEs y editores de texto manejan esto de forma transparente. En el caso de los módulos de Python 3.x, el estándar de codificación es el UTF-8; en la rama 2.x del lenguaje, el estándar suele ser ASCII.

  • Las líneas físicas se pueden unir explícitamente para formar una única línea lógica con el empleo del caracter de barra invertida “\” colocado como caracter de escape justo antes de la secuencia de fin de línea. Esto es considerado como una mala práctica y generalmente debe evitarse, pero aún así es sintácticamente legal hacerlo. Uno de los riesgos que implica, es que por error incluyamos, por ejemplo, un caracter de espacio inmediatamente detrás del “\”, lo cual constituye un error sintáctico que puede ser difícil de encontrar, pues los caracteres de espacio no son visibles. Por suerte la mayoría de los editores e IDEs actuales incluyen la opción de eliminar automáticamente los caracteres de espacio al final de las líneas físicas

  • Las líneas físicas se pueden unir implícitamente para formar una única línea lógica empleado los pares de caracteres “()”, “[]” y “{}”. Si una línea lógica se inicia con un “(“ se extenderá por tantas líneas físicas como sea necesario y solo terminará con el caracter de cierre, es decir: “)”. Esta es la forma de proceder actualmente recomendada y empleada por la mayoría de los programadores con experiencia en Python. Un ejemplo de este tipo de sentencia podría ser:

>>> print(

... 'Hola',

... 'Mundo'

... )

Hola Mundo

Es necesario hacer notar que en este tipo de unión, las líneas físicas pueden contener comentarios en linea (in-line comments), como por ejemplo:

month_names = ['January', 'February', 'March', # Primer trimestre

               'April', 'May', 'June', # Segundo trimestre

               'July', 'August', 'September', # Tercer trimestre

               'October', 'November', 'December'] # Cuarto trimestre

  • Las líneas en blanco contienen solo caracteres de espacio, tabulación y fin de línea. Su empleo está estrechamente ligado a la legibilidad del código, sin embargo, en una sección interactiva del intérprete o Ciclo de Lectura, Evaluación, Impresión (REPL por sus siglas en inglés), una línea en blanco representa la conclusión de una sentencia compuesta

  • Para agrupar las sentencias dentro de la cláusula o cabecera (header) de una sentencia compuesta se empleará la indentación (Python, a diferencia de otros lenguajes no emplea llaves “{}” o bloques begin...end), que puede definirse con caracteres de espacio (se recomienda el empleo de 4 espacios, que es considerado el estilo óptimo de Python) o de tabulación. Es recomendable no mezclar ambos tipos de caracteres en un mimo fragmento de código. La indentación debe ser la misma, al menos en un mimo bloque de código y la primera sentencia de un archivo de código no debe tener indentación

  • A excepción del inicio de línea, donde determinan la pertenencia de una sentencia simple a una compuesta, los espacios en blanco pueden ser empleados libremente en el interior de las sentencias (entre tokens), sin embargo, a este respecto existen recomendaciones bien definidas en el PEP 8 y que es aconsejable seguir a fin de que nuestro código presente la apariencia de un código Python bien formateado.

Tokens del Lenguaje

En la sintaxis de Python se reconocen los tokens o señales siguiente:

  • NEWLINE: determina el fin de una línea lógica y el comienzo de otra

  • INDENT: indentación de las sentencias dentro de una sentencia compuesta

  • DEDENT: fin de indentación que determina el fin de una sentencia compuesta

  • Identificadores (identifiers): nombres que identifican a variables, funciones, clases, métodos, constantes, módulos, paquetes, etc. Los identificadores comienzan con letras (A – Z, a – z) o con guiones bajos (_), seguidos de cero o más letras, guiones bajos o dígitos (0 – 9). Python es un lenguaje “Case Sensitive, lo que significa que las letras mayúsculas son distintas de las minúsculas

  • Palabras clave o reservadas (keywords): palabras con significado especial para el lenguaje, que no pueden ser empleadas como identificadores. Algunas palabras clave son sentencia simples (Ej. break, continue), otros, cláusulas de sentencias compuesta (Ej. def, class, for), mientras que otras son operadores (Ej. and, or, is). Las palabras reservadas de Python se pueden consultar tecleando en el prompt intérprete, las sentencias siguientes:

>>> import keyword

>>> keyword.kwlist

['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']

  • Literales (literals): valores numéricos o de cadena de caracteres que aparecen directamente escritos en el código (Ej. “Python”, 25, 3.14)

  • Operadores (operators): caracteres empleados para denotar operaciones diversas tales como: aritméticas, lógicas, de asignación, etc.

  • Delimitadores (delimiters): caracteres empleados para delimitar literales, líneas lógicas, entre otras.

Todos estos elementos y algunos otros forman parte de la sintaxis de Python, y los emplearemos en mayor o menor medida en nuestro código.

Python 2.x VS Python 3.x

Existen diferencias sintácticas significativas entre las dos ramas actuales del lenguaje que hace que el código escrito en Python 2.x no funcione en Python 3.x y viceversa. La lista de estas diferencias es un tanto larga, y de vez en vez se ve aumentada por nuevos elementos. La mejor referencia para mantenerse al día en este tema es la documentación oficial del lenguaje, sin embargo, veremos a continuación algunas de las diferencias más significativas, siempre comparando la rama 2.x con la 3.x.

  • print deja de ser una sentencia para convertirse en función incluida o integrada (built-in)

  • La captura de excepciones pasa de ser: except exc, var a except exc as var

  • Se elimina el operador de comparación “<>” en favor de “!=

  • from module import * ahora solo se permite a nivel de módulo, eliminando la posibilidad de hacerlo dentro de las funciones

  • from .[module] import name es ahora la única sintaxis aceptada para los imports relativos. Todos los imports que no comienzan con punto “.” son interpretados como absolutos

  • La división de enteros (1 / 2 = 0.5) retorna números de coma flotante o floats (True division). El resultado truncado se obtiene ahora con el operador // (floor division)

Lecturas Recomendadas

Para profundizar un poco más en las reglas generales de la sintaxis de Python, recomendamos la lectura del Capítulo 2. “Lexical analysisde la documentación oficial del lenguaje. Además, recomendamos la lectura del Capítulo 3, Tema: “Examining syntax rules” del libro: “Python Essentialspor Steven F. Lott, publicado por la editorial: “Packt Publishingy del Capítulo 4: “The Python Languaje”, del libro: “Python in a Nutshellpor Alex Martelli, publicado por “O’Reilly.

Ok, esto es todo por ahora, si este artículo te resultó interesante y/o útil, compártelo para que otros también puedan acceder a él. Déjanos tus comentarios y podremos mejorar nuestros contenidos.

Gracias de antemano,

lpozo

4 comentarios

Ir al formulario de comentarios

    • dcruz en 7 febrero, 2018 a las 7:03 pm

    El “equipo” de Python Scouts cuántas personas lo componen.. ?

    1. Por ahora solo dos.

        • dcruz en 10 febrero, 2018 a las 2:33 pm

        Yo comencé con Python hace poco, en el trabajo que tengo actualmente lo que mas debería saber fuera SQL, pero bueno, ando con Head First Python, ya completé el chapter 1 que es trabajo con listas, voy poco a poco ahí machacando.

        @Ozkar no me des un cocotazo por no estudiar más a fondo SQL 😛

        1. Buena elección para comenzar. Suerte con eso. Te recomiendo que pruebes con: Aprenda a pensar como un programador con Python. Es excelente para comenzar.
          saludos,
          lpozo

Los comentarios han sido desactivados.