Programación RPi Python 06: Conceptos básicos de Python

En el tutorial anterior , analizamos el lenguaje Python, sus aplicaciones, implementaciones (incluidos CPython, Jython, IronPython y PyPy) e IDE. También aprendimos cómo escribir scripts y módulos de Python, y cómo ejecutar scripts de Python a través de un entorno de desarrollo integrado (o IDLE) y un shell Bash.

Antes de pasar al control del hardware mediante scripts de Python, será útil tener una base sólida en el lenguaje. Entonces, en este tutorial, analizamos los conceptos básicos de la programación en Python y aprendemos algunas de las mejores prácticas, incluido el estilo de escritura de código en Python.

Aunque este es un curso intensivo, podrá ejecutar scripts cortos de Python en Raspberry Pi (RPi). Así que mantén tu Raspbian arrancado e IDLE abierto. Y si nota una pantalla en blanco en su monitor cuando enciende su escritorio RPi, ocasionalmente no arranca unos días después de la instalación.

Algunas razones: tarjeta MicroSD suelta o conexión de cable HDMI. Si esto ocurre, vuelva a conectar la tarjeta MicroSD y el cable HDMI y vuelva a conectar el RPi a su escritorio. Si esto no resuelve el problema, intenta reinstalar Raspbian en la tarjeta MicroSD.

Sintaxis de Python
La sintaxis de Python es diferente a la de otros lenguajes de programación. En la mayoría de los demás lenguajes de programación, las instrucciones (las líneas lógicas de código) terminan con un delimitador, como un punto y coma (“;”).

Sin embargo, Python utiliza espacios y sangrías para mantener la estructura de bloques de un script. Por lo tanto, agregar un espacio involuntario al comienzo de una línea (una línea física en el editor de texto) bloqueará el código de manera diferente. Esto significa que las sangrías son muy importantes en Python. A veces, esto resulta desalentador o aterrador para los desarrolladores acostumbrados a otros lenguajes.

En Python, cada línea física de código se interpreta como una única línea lógica (una declaración de código) a menos que continúe. Si una línea lógica es demasiado larga para caber en una sola línea física, la primera línea puede terminar con una barra invertida (“\”). Esto indica que la línea lógica continúa hasta la siguiente línea física.

Cuando una línea lógica continúa con la siguiente, cualquier sangría en la segunda línea es irrelevante. Pero si la segunda línea no es una continuación de la primera (porque no hay barra invertida al final), eso marca el final de esa línea lógica. Cuando una línea lógica continúa, no debe haber comentarios excepto en la última línea física.

Sin embargo, al igual que en otros lenguajes de programación, un bloque de código en Python se indica mediante corchetes ("{") o delimitadores de "inicio/fin". La primera línea de código no debe tener sangría. Pero en Python, todas las líneas adyacentes sangradas por el mismo valor se identificarán como un bloque de código (como si estuvieran entre corchetes).

Se recomienda utilizar sólo espacios o tabulaciones para sangrar el código en Python, pero evite mezclarlos (la versión 3 no permite que esto suceda). Las pestañas también pueden tratarse de manera diferente en diferentes editores de texto, por lo que es ideal evitarlas. Lo mejor es utilizar cuatro espacios (columnas lógicas 5, 9, 13, etc.).

Si hay un delimitador abierto, como llave ("{"), corchete ("(") o paréntesis ("(") en una línea física, la siguiente línea continúa automáticamente hasta que se produce el delimitador de cierre del mismo tipo.

Comentarios
Todos los comentarios en Python comienzan con un hashtag (“#”). Todo lo que está a la derecha del hashtag, hasta el final de la línea, es tratado como un comentario por el intérprete de Python. Los comentarios no se procesan como líneas de código. En cambio, son cadenas de texto insertadas en el código para proporcionar información útil a otros programadores.

Se recomienda utilizar comentarios generosamente para que su código sea legible. Estos comentarios deben indicar cosas significativas sobre el código sin iterar sobre cosas obvias.

Por ejemplo, un comentario de Python podría verse así:

# Este script controla la interfaz de un personaje.
# LCD con Raspberry Pi GPIO y gestión de pantalla
# cadena de mensaje en él.

Identificadores
Los identificadores son nombres dados a variables, constantes, funciones, clases, módulos y otros objetos en cualquier lenguaje de programación.

En Python, cualquier identificador debe comenzar con una letra (compatible con ASCII) o un guión bajo, que puede ir seguido de más letras, dígitos o guiones bajos. Los caracteres de puntuación no se pueden utilizar como identificadores.

Los identificadores en Python distinguen entre mayúsculas y minúsculas. Por ejemplo, "GPIO_status" y "gpio_status" se refieren a objetos diferentes.

Aquí hay algunos identificadores válidos en Python:

LCD_message _display_status LED01
_LED_ON LED_OFF dormir

Estos son ejemplos de identificadores no válidos en Python:

01LED LCD@estado 123

Palabras clave
Las palabras clave son palabras reservadas y no se pueden utilizar como identificadores de otros objetos. Python V2 tiene 31 palabras clave.

Ellos son:

y como pretender romper
la clase continúa definitivamente
elif más ejecutivo
finalmente detener global
si la importación es
lambda no o pasa
imprimir ampliar volver intentar
mientras con ingresos

Python V3 tiene 33 palabras clave. Ellos son:

y como pretender romper
la clase continúa definitivamente
elif de lo contrario es falso
finalmente detener global
si la importación es
lambda ninguno no local no
o pasar, aumentar, regresar
verdadero intento mientras tengas
cosecha

Declaraciones
Las instrucciones son líneas lógicas de código que realizan un tipo de operación sobre los datos.

En Python, las declaraciones pueden ser simples o compuestas. Las declaraciones simples son líneas lógicas únicas de código que generalmente son una asignación de valores a variables o expresiones simples. Las declaraciones compuestas contienen más de una declaración simple agrupada como un bloque de código con la misma cantidad de sangría.

Cada declaración simple dentro de una declaración compuesta se llama cláusula. Una cláusula puede tener un encabezado que puede comenzar con una palabra clave y terminar con dos puntos (“:”). El encabezado que contiene una cláusula va seguido de otras declaraciones (o cláusulas) en el bloque y se denominan cuerpo del bloque.

A diferencia de otros lenguajes de programación, en Python no hay declaraciones, solo declaraciones simples y compuestas.

Programación orientada a objetos
El código en cualquier lenguaje de programación se utiliza para procesar datos. Los datos pueden ser valores constantes, grupos ordenados y desordenados de valores constantes o estructuras de datos más complejas (como clases y objetos).

Básicamente, cada tipo de datos tiene un tipo. El tipo de datos determina cómo debe tratarse en el código, qué propiedades puede tener y qué operaciones (en forma de operadores, funciones y métodos) se pueden realizar con él.

Un nombre de referencia accede a cada dato del código. Este nombre de referencia puede ser un identificador, diferente de las palabras clave y los identificadores utilizados en este ámbito. Por tanto, las referencias a determinados datos deben ser siempre únicas dentro del mismo ámbito.

Las referencias que apuntan a datos cuyo contenido se puede cambiar se denominan variables. Variables de servidor como referencias que se vinculan a ubicaciones de memoria donde el contenido de esa ubicación se puede cambiar en el código. Las referencias que apuntan a datos cuyo contenido nunca cambiará en el código se denominan constantes.

El valor asignado a una referencia definida como constante no se puede cambiar una vez establecido.

Las declaraciones de un proceso de codificación son el contenido de las variables. Estas declaraciones pueden ser simples o compuestas. Las instrucciones compuestas se pueden utilizar para tomar decisiones o cambiar la secuencia de ejecución de otras instrucciones. Es posible que sea necesario organizar más de una declaración simple y/o compuesta en bloques reutilizables (invocables), que se denominan funciones.

Además, pueden existir grupos ordenados y desordenados de valores constantes asignados a una variable. También puede haber estructuras de datos más complejas donde los valores de datos relacionados y las operaciones sobre ellos se agrupan como una clase. Normalmente, una clase representa el tipo real de objeto (como una clase) definido para representar a las personas.

Cualquier objeto real tendrá algunas propiedades definidas como atributos en una clase. Estos atributos son variables especiales que se vinculan a una clase específica y representan las propiedades del objeto, que también están representadas por la clase.

Puede haber algunas operaciones sobre el contenido de los atributos. Las funciones (vinculadas a la clase) que procesan el contenido de los atributos de la clase se denominan métodos.

Las instancias específicas de una clase se denominan objetos (objetos de código). Estos objetos tienen todos los atributos y métodos definidos para su clase. Los objetos pertenecen a clases internas o definidas por el usuario. En la programación orientada a objetos, los datos siempre se procesan como valores asociados con variables y atributos de objetos.

Objetos, clases, tipos de datos e ID de Python
Python también se diferencia de otros lenguajes en la forma en que maneja los datos. Por ejemplo, en Python todo es un objeto. Esto incluye los valores asignados a variables o atributos que son objetos de clases de tipos de datos integradas.

Los tipos de datos son clases de Python técnicamente integradas. Cuando se asigna un valor a una variable o atributo, el valor se convierte en el objeto que pertenece a una clase de tipo de datos. Otra forma de decir esto: el valor se convierte en una instancia de una clase de tipo de datos incorporada en Python.

Lo que esto significa es que en Python no es necesario declarar el tipo de datos de las referencias. Python asume implícitamente el tipo de datos de la referencia. Es por eso que las palabras clave son innecesarias para declarar tipos de datos en Python.

Otra función interesante de Python son los ID. Dependiendo de la implementación y la plataforma, Python solo almacena valores únicos en ubicaciones de memoria. Si dos referencias apuntan al mismo valor, tendrán el mismo ID y apuntarán a la misma ubicación de memoria. Python no duplica los mismos valores (literales), incluso si están vinculados a referencias diferentes.

Mutable, inmutable, iterable e iteradores
Los objetos de Python pueden ser mutables o inmutables. Al realizar cualquier operación (a través de operadores, funciones o métodos) en un objeto inmutable, el tipo de datos del valor de retorno de la expresión respectiva siempre será el mismo que el del objeto.

Al realizar operaciones en objetos mutables, el tipo de datos del valor de retorno de la expresión respectiva puede ser diferente del tipo de datos del objeto.

Un objeto puede ser iterable, lo que significa que el objeto es una colección de elementos (valores u otros objetos) a los que se puede acceder mediante índices. El objeto que sirve como proveedor de índices para iterar un iterable se llama iterador.

Curiosamente, cada iterador es un iterable, pero cada iterable puede no ser un iterador.

Literales
Las notaciones para valores constantes de tipos de datos integrados se denominan literales. Los literales pueden ser números enteros, números de coma flotante, números complejos, cadenas o bytes. Los literales son objetos Python inmutables y el valor de retorno de una expresión para ellos tiene el mismo tipo de datos que el literal.

Tipos de datos Clases
Python admite todos los tipos de datos fundamentales (números, cadenas, booleanos, etc.), así como tipos de datos definidos por el usuario (clases definidas por el usuario). Los tipos de datos son clases en Python. Hay muchos tipos de datos disponibles en Python, que incluyen:

Enteros: pertenece a la clase incorporada o larga en Python. Pueden ser números decimales, binarios, octales o hexadecimales.

  • Los valores decimales comienzan con cualquier dígito distinto de cero, seguido de otros dígitos.
  • Los valores binarios comienzan con 0b, seguido de una secuencia de 0 y 1.
  • Los valores octales comienzan con 0o, seguido de una secuencia de dígitos octales (0 a 7). Los valores hexadecimales comienzan con 0x, seguido de una secuencia de caracteres hexadecimales (0 a 9, A, B, C, D, E y F).

En Python V3, todos los números enteros pertenecen a la clase interna porque no hay distinción entre interna y larga . Desde Python 3.6 en adelante, los números enteros pueden incluir guiones bajos (“_”) entre dígitos y caracteres como ayuda visual, como “0b_0111_1111” equivale a “0b01111111”.

Números de coma flotante: estos valores pertenecen a la clase flotante . Estos son números decimales que pueden contener un punto decimal, un exponente o ambos. En Python, los valores de punto flotante generalmente tienen una precisión de 53 bits.

Números complejos: estos valores pertenecen a la clase compleja . Un número complejo puede tener dos valores de coma flotante con una “j” o “J” en el medio, o un valor de coma flotante a cada lado de la “j” o “J”. Se puede acceder a la parte real e imaginaria de un objeto complejo que está definido por una variable llamada " x" como "x.real" y "x.imag", respectivamente.

Cadenas: son una secuencia de caracteres que representan valores de texto. Las cadenas pertenecen a la clase str en Python. Los objetos de cadena se pueden formatear en bytes o Unicode. Python V2 tiene codificación ASCII y Python V3 tiene codificación Unicode de forma predeterminada.

Puede imponer diferentes estilos de codificación en su secuencia de comandos de Python agregando un comentario de directiva de codificación en la primera línea de la secuencia de comandos. El estilo de codificación sólo afecta a los caracteres que se pueden utilizar en cadenas y comentarios.

Una directiva de codificación se ve así:

# codificación: utf-8

En Python, las cadenas pueden tener comillas simples, dobles o triples. También puede utilizar un doble en una cadena entre comillas simples y un sencillo en una cadena entre comillas dobles sin una secuencia de escape. Si se va a utilizar single en una cadena entre comillas simples y double en una cadena entre comillas dobles, se debe "escapar" mediante una barra invertida de la siguiente manera:

“Me dijo “tráeme un vaso de agua””
'Me voy a la oficina'

Una cadena también puede abarcar más de una línea física en el código usando la barra invertida de la siguiente manera:

“Esto es muy, muy, muy,\
texto muy largo”

Para incluir una nueva línea en una cadena, la secuencia de escape de nueva línea (\n) debe usarse así:

“Esta es una línea. \nEsta es la segunda línea”

Para cadenas de varias líneas, es mejor utilizar cadenas entre comillas triples. En las cadenas entre comillas triples, los saltos de línea se tratan como caracteres de nueva línea. Aquí hay un ejemplo:

“””Esta es una línea.
Esta es la segunda línea.
Esta es la tercera línea.”””

Una cadena entre comillas simples o dobles no puede contener comillas sin escape: la línea termina o tiene barras invertidas. Una cadena entre comillas triples no puede contener solo una barra invertida sin escape. En una cadena entre comillas triples, si una barra invertida va seguida de una nueva línea, la barra invertida y el carácter de nueva línea se ignoran.

Para incluir barras invertidas, comillas, finales de línea, tabulaciones o caracteres especiales en un objeto de cadena, asegúrese de utilizar secuencias de escape.

Python permite estas secuencias de escape en cadenas:

Secuencia de escape Literal de cadena
\ Barra invertida y nueva línea ignoradas
\\ Barra invertida ( )
\' Una frase (')
\” Comilla doble (“)
\El Zumbador ASCII
\B retroceso ASCII
\F formulario ASCII
\norte avance de línea ASCII
\r retorno de transporte ASCII
\ t Guía horizontal ASCII
\v Guía vertical ASCII
\ooo Personaje con valle octal ooo
\xhhh Carácter con valor hexadecimal hh
\uHHH Carácter Unicode con valor hexadecimal HHHH
\uHHHHHHH Carácter Unicode con valor hexadecimal HHHHHHHH
\N{nombre} Carácter Unicode con nombre Unicode estándar

Cadenas sin formato: son cadenas entrecomilladas o triples precedidas por "r" o "R" antes de la comilla inicial. En cadenas sin formato, las secuencias de escape no se interpretan. Si las secuencias de escape se incluyen en una cadena sin formato, pasan a formar parte de la cadena no interpretada.

Además, una cadena sin formato no puede terminar con un número impar de barras invertidas seguidas de una comilla final. Si esto ocurre, se escapará la comilla final y se producirá un error de sintaxis. Las cadenas sin formato son útiles cuando un valor de cadena tiene muchas barras invertidas.

Algunos ejemplos válidos de cadenas sin formato son:

r”\\” (equivalente a \\)
R'Olá\n' (equivalente a Hola\n)

Algunos ejemplos de cadenas sin formato no válidas son los siguientes:

r'\'
r'\\\'
R”Hola\n\”

En el próximo tutorial continuaremos esta discusión sobre los fundamentos del lenguaje de programación Python.

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.