hacer una cosa bien no significa hacerla perfectamente. La perfección en el mundo real no existe, por lo que, según la frase la practicidad vence a la pureza, debemos hacer las cosas bastante bien, como sugiere también Alex Martelli en su charla titulada Good enough is good enough: http://pyvideo.org/video/1738/good-enough-is-good-enough.
Los elementos del código Python
Si miramos un archivo contenedor del código Python, veremos que, como cualquier archivo de texto, está formado por una serie de líneas, que llamaremos líneas físicas. Las líneas físicas no tienen ningún significado para el intérprete Python, sino que sirven sencillamente para organizar visualmente el código de manera legible. Por ejemplo, el archivo myfile.py contiene dos líneas físicas:
El significado obtenido por el intérprete son las líneas lógicas. Una línea lógica corresponde normalmente a una línea física, y es posible subdividir una línea física en más de una línea lógica, separándolas con un punto y coma. Por ejemplo, el siguiente archivo myfile.py contiene tres líneas físicas y seis líneas lógicas:
Probablemente en pocas ocasiones se verán más líneas lógicas en la misma línea física, puesto que es un pésimo estilo de programación, según aconseja de manera apropiada la PEP-0008.
También es posible repartir una línea lógica en varias líneas físicas. Esto puede verse a menudo, y puede hacerse tanto con la barra invertida, como en el ejemplo siguiente:
como mediante paréntesis:
y también separando en varias líneas físicas una lista, una tupla, un conjunto o un diccionario:
El texto contenido en el interior de una línea lógica pertenece a una de estas categorías: comentarios, literales, operadores, palabras clave, etiquetas y delimitadores. Consideremos, por ejemplo, el archivo siguiente:
Se estructura en cuatro líneas lógicas. En la primera, hay dos etiquetas, x e input, un literal de tipo cadena, que empieza y acaba con comillas simples, y tres delimitadores (los dos paréntesis y el signo igual). En la segunda línea hay tres etiquetas (num, int y x), tres delimitadores (los dos paréntesis y el signo igual) y un comentario (el texto que empieza con un símbolo de almohadilla y termina con la línea física). En la tercera hay dos etiquetas (result y num), un operador (/), un literal de tipo entero (10), un delimitador (el signo igual) y tres palabras clave: if, else y None. Por último, en la cuarta línea hay dos etiquetas (print y result) y dos delimitadores (los paréntesis).
El componente del intérprete que se ocupa de efectuar el análisis lexical del código se denomina parser.
Los comentarios
Como hemos visto, los comentarios sirven principalmente para documentar el código con el fin de facilitar su lectura. Se trata de fragmentos de texto que empiezan con el símbolo de almohadilla y terminan con el final de la línea física. Cuando el intérprete encuentra un comentario, no ejecuta ninguna acción:
Sin embargo, en ocasiones los comentarios son analizados por el parser por tener un significado especial, como en el caso del comentario sobre la codificación del código fuente, que hemos visto en la sección Ejecución del código Python a partir de un archivo.
Literales
Las instancias de los tipos de datos básicos se distinguen fácilmente unas de otras, además de por el tipo, también por el valor. Estos objetos son el corazón del lenguaje y representan los elementos clave de todos los programas Python. Para facilitar tanto la lectura como la escritura de los programas, se ha decidido asociar a estas instancias representaciones textuales de inmediata comprensión, que permitan determinar de manera única tanto el tipo como el valor del objeto al cual se refieren. Estas representaciones textuales se denominan literales.
Por ejemplo, un literal de cadena de texto es código delimitado por comillas simples, comillas, triples comillas simples o triples comillas. Cuando el programa se ejecuta, Python crea a partir del literal un objeto de tipo str, es decir, una estructura de datos que se carga en la memoria de nuestro ordenador y que representa la cadena de caracteres:
Una secuencia de dígitos decimales, separados del resto del código por uno o más espacios, representa un literal entero, a partir del cual Python crea un objeto del tipo int:
Para el resto de instancias de los tipos de datos básicos ocurre de forma similar:
La definición de literal nos ha permitido proporcionar otras informaciones útiles para comprender el significado de objeto. Python crea los objetos cuando el programa se está ejecutando, en el momento en que encuentra fragmentos de código a los cuales sabe que debe hacer corresponder estructuras de datos almacenados, representativas de dicho código. Por ejemplo, a partir de un simple fragmento de código, como el literal 'python', se crea en la memoria del ordenador una compleja estructura de datos, que no solo contiene los caracteres de la cadena de texto, sino también muchas otras informaciones, como el tipo de estructura de los datos:
Gracias a estas informaciones Python comprende cuáles son las acciones que puede llevar a cabo con estos datos:
Acabaremos diciendo que (obviamente) no es posible realizar asignaciones a literales:
Operadores
Los operadores son símbolos a los cuales Python asocia un significado que depende del tipo de sus operandos. Por ejemplo, el símbolo + es un operador. Cuando sus operandos son números, Python los suma, cuando son secuencias, los concatena y cuando no sabe cómo actuar, genera un error:
Otros ejemplos de operadores son los siguientes:
A lo largo de este libro explicaremos el significado de los distintos operadores.
Palabras clave
Como podemos intuir, las palabras clave (en inglés,