Blog
Introducción al lenguaje de programación Python
- 13 noviembre, 2018
- Posted by: fagudo
- Category: Programación
¿Qué es Python?
En pocas palabras:
- Lenguaje de programación dinámico, interpretado y fácil de aprender
- Creado por Guido van Rossum en 1991
- Ampliamente utilizado en ciencia e ingeniería
- Multitud de bibliotecas para realizar diferentes tareas.
Python y los tipos de datos
Antes de empezar con la sintáxis, un pequeño comentario sobre los tipos de datos y las variables en Python
En Python una variable no representa lo mismo que en otros lenguajes de programación. Una variable no es una ubicación de memoria donde guardamos un dato. Es una mera etiqueta o alias, que apunta a un objeto. Este objeto puede ser cualquier cosa: un número, una cadena, una función, una instancia de una clase, etc. Y una misma variable puede apuntar a diferentes objetos durante el tiempo de ejecución del programa. Por eso decimos que Python usa tipado dinámico
Introducción a la sintáxis de Python
- Tipos numéricos
Python dispone de los tipos numéricos y las operaciones más habituales:
2 * 4 - (7 - 1) / 3 + 1.0 # 7.0
Las divisiones por cero lanzan un error
1/0 Traceback (most recent call last): File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
La división entre enteros en Python 3 devuelve un número real, al contrario que en Python 2.
3 / 2 # 1.5 Se puede forzar que la división sea entera con el operador //: 3 // 2 # 1 Se puede elevar un número a otro con el operador **: 2 ** 16 # 65536 Otro tipo que nos resultará muy útil son los complejos: 2 + 3j # (2+3j) abs(2 + 3j) # 3.605551275463989 Podemos convertir variables a int, float, complex, str... int(18.6) # 18 round(18.6) # 19 float(1) # 1.0 complex(2) # (2+0j) str(256568) # '256568' Podemos comprobar el tipo de una variable: a = 2. type(a) # float isinstance(a, float) # True
Otras funciones útiles son:
print('hola mundo') # hola mundo
La función print es la que se usa para imprimir resultados por pantalla. Por si lo ves en algún sitio, en Python 2 era una sentencia y funcionaba de manera distinta, sin paréntesis y sin posibilidad de pasar argumentos adicionales.
max(1,5,8,7) # 8 min(-1,1,0) # -1
- Asignación y operadores de comparación
La asignación se realiza con el operador =. Los nombres de las variables en Python pueden contener caracteres alfanuméricos (empezando con una letra) a-z, A-Z, 0-9 y otros símbolos como _
Por cuestiones de estilo, las variables suelen empezar con minúscula, reservando la mayúcula para clases. Algunos nombres no pueden ser usados porque son usados por python:
and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, with, yield
Un ejemplo simple de asignación a una variable:
a = 1 + 2j b = 3.14159 b
Podemos hacer asignación múltiple
x, y = 1, 2
Los operadores de comparación son:
• == igual a
• != distinto de
• < menor que
• ⇐ menor o igual que • > mayor que
• >= mayor o igual que
Devolverán un booleano: True o False
x=3 y=1 x < y # False x <= y # False x > y # True x >= y # True x <= 2 < y # True 'a' < 'b' # True
Si comparamos elementos no comparables, obtendremos un error
1 < 'hola' Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
- Strings
Uno de los mayores cismas entre Python 2 y Python 3
En Python 2, hay unicode y str
En Python 3, hay byte y unicode (todas las cadenas lo son)
En Python 3, Todos los strings son secuencias de caracteres Unicode
# Ejemplo sencillo de formateo de cadenas con variables posicionales
nombre = 'Jorge' cualidad = 'sexy' print("{0} es tremendamente {1}".format(nombre, cualidad)) # Puedo sustituir posiciones de un array si_suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] print("1000{0[0]} = 1{0[1]}".format(si_suffixes)) # 1000KB = 1MB
En Python 2, el formateador de cadenas era muy parecido al estándar de lenguajes como C. Aun es posible usarlo en Python 3, pero no se recomienda. También podemos formatear cadenas simplemente concatenando, pero tampoco se recomienda
- Otros tipos de datos: secuencias
Otro tipo de datos muy importante que vamos a usar son las secuencias: las tuplas y las listas. Los dos son conjuntos ordenados de elementos: las tuplas se demarcan con paréntesis y las listas con corchetes.
una_lista = [1, 2, 3.0, 4 + 0j, "5"] una_tupla = (1, 2, 3.0, 4 + 0j, "5") assert(una_lista == una_tupla) # False
Para las tuplas, podemos incluso obviar los paréntesis:
tupla_sin_parentesis = 2,5,6,9,7 print(type(tupla_sin_parentesis)) # tuple
Puedes ver las tuplas como una estructura de datos similar al struct de C: un almacén de longitud fija de datos potencialmente heterogéneos.
En los dos tipos podemos comprobar fácilmente la longitud, o si contienen un elemento concreto
una_lista = [1, 2, 3.0, 4 + 0j, "5"] una_tupla = (1, 2, 3.0, 4 + 0j, "5") assert(2 in una_lista) # True assert(2 in una_tupla) # True print(len(una_lista)) # 5 print(len(una_tupla)) # 5
Podemos indexar las secuencias, utilizando la sintaxis [<inicio>:<final>:<salto>]:
una_lista = [1, 2, 3.0, 4 + 0j, "5"] una_tupla = (1, 2, 3.0, 4 + 0j, "5") print(una_lista[0]) # Primer elemento, 1 print(una_tupla[1]) # Segundo elemento, 2 print(una_lista[0:2]) # Desde el primero hasta el tercero, excluyendo este: 1, 2 print(una_tupla[:3]) # Desde el primero hasta el cuarto, excluyendo este: 1, 2, 3.0 print(una_lista[-1]) # El último: 4 + 0j print(una_tupla[:]) # Desde el primero hasta el último print(una_lista[::2]) # Desde el primero hasta el último, saltando 2: 1, 3.0
Fíjate en dos detalles:
Cuando especificamos índices negativos, recorremos el array desde el final hasta el principio. Por eso [-1] da el último elemento, [-2] el penúltimo y así sucesivamente.
Hemos utilizado la notación [::2] para el último caso. Si no especificamos nada para el inicio y el fin, empezamos en el principio y terminamos en el final. Por eso [:] devuelve todos los elementos de la secuencia.
- Otros tipos de datos: diccionarios
# Crear un diccionario a_dict = {'server': 'server.com', 'database': 'MySQL'} print(a_dict) # {'database': 'MySQL', 'server': 'server.com'}
# Podemos acceder a los elementos de un diccionario usando indexación tipo array print(a_dict['server']) # server.com print(a_dict['database']) # MySQL
# Se pueden añadir todos los elementos que se quiera a un diccionario. Y también podemos modificar los existentes a_dict['user'] = 'Jorge' a_dict['database'] = 'PostgreSQL' print(a_dict) # {'database': 'PostgreSQL', 'user': 'Jorge', 'server': 'server.com'}