En este tutorial interactivo vamos a aprender Python online. Vamos a ver las características principales en varias secciones y veremos un ejemplo en cada sección para poner en práctica la teoría. Es un curso de python gratis para principiantes, ya que no entraremos en profundidad en todas las librerías que ofrece Python.

Como sugerencia, te recomiendo algunos libros de html, libros de css, libros de javascript y libros de Python que sirven para entrar en detalle en estas materias.

El lenguaje Python fue creado por Guido van Rossum a finales de los años 80, y hasta entonces no ha parado de incrementar su popularidad, hasta situarse en el Top 10 de los lenguajes de programación más utilizados hoy en día.
Principalmente se creó para ser un lenguaje interpretado y multiparadigma. Se diseñó para programar orientado a objetos, o funcional. Se creó como un sucesor del lenguaje ABC con mejoras a nivel de tratamiento de excepciones y interacción con el sistema operativo Amoeba.

El lenguaje Python simplifica en gran parte llevar la contabilidad de punteros y usa un tipado dinámico. Dispone de múltipres librerias para trabajar con ficheros y redes (como http).

Características

Es un lenguaje de programación estructurado y interpretado. Es decir, a partir de un código fuente, se debe ejecutar con el comando python. Está disponible para Windows, Mac OS, Linux y Raspberry.

Una característica es que Python no usa las llaves { } para agrupar el código, sino que usa la indentación junto con los :, por ejemplo en los bucles for y en los if.

En principio se puede usar con programación orientada a objetos aunque se puede usar como procedural muy básico. En Python todo son objetos, ya sea un int, un string, una lista, un diccionario... e incluso el tipo None.
A nivel de concurrencia hay módules para usar threads, haciendo que la programación concurrente sea más fácil que en C. Así pues dispone de librerías para realizar varias tareas simultaneas en un sólo programa.
Se estructura en paquetes (módulos), y existe un método main, que es el punto de entrada de un programa.
Para definir módulos basta crear una carpeta con el fichero __init__.py y los ficheros.py con la implementación del módulo.

El ejemplo típico de HolaMundo

La secuencia que debemos realizar para ejecutar cada ejemplo es:

Hacer click en el ejemplo HolaMundo.py .

Nota: Si el botón está desactivado , no puede realizar ninguna acción.

Para empezar veamos el típico HolaMundo. A la derecha vemos un explorador de archivos ordenado alfabéticamente. Haz click en el fichero HolaMundo.py del explorador de archivos para abrir el fichero en el editor.

La estructura inicial del programa más sencillo es la que podemos ver en el editor Python a la derecha. En esta versión gratuita del tutorial interactivo de Python, casi todas las opciones están deshabilitadas, pero se pueden ver y ejecutar todos los ejemplos del tutorial online.

#Ejemplo 1
#El tipico Hola mundo!

def main():
    print("Hola mundo!")

main()

Estas líneas representan comentarios. También se puede usar el comentario en una sola línea:

#comentarios en una linea

Se pueden comentar varias lineas con tres comillas """ para abrir y cerrar

Se puede ver que las sentencias no acaban en punto y coma ; y los bloques no se engloban entre llaves {}

Ejecutar el programa

Prueba a abrir el HolaMundo.py y haz click en el botón Ejecutar.

A continuación veremos en la zona inferior de mensajes el resultado de la ejecución: Hola mundo!

Si estuvieramos en Windows o UNIX, en el Símbolo del sistema o en el terminal de texto, para ejecutar el programa habría que escribir python Nombre.py y nos mostraría por la pantalla: Hola mundo!

Los tipos de datos habituales que Python tiene por defecto son:
· booleanos(True/False), que indica verdadero o falso
Nota: una variable se puede evaluar como un booleano y siempre valdrá True excepto que sea una cadena de texto vacía, un 0 o variables interadoras sin elementos
· números enteros(int)
· números con coma flotante(float)
· números complejos (3 + 5j)
· cadenas de texto (str) que se definen como:

str ="Hola"
y que pueden ir con comillas simples o dobles.
Se pueden definir cadenas de texto de varias lineas usando las 3 comillas
cadena = """ cadena de texto de varias lineas """

Existen además tipos de datos que se pueden iterar:
· listas (list) que almacenan datos ordenados y mutables de diferente tipos

lis = ['pala',4]
donde se accede al valor indicando la posición que ocupa en la lista 0...n
Nota: se pueden usar indices negativos, así -1 es el último elemento
· diccionarios (dict) que almacenan parejas de clave/valor
{'clave': valor}
no ordenadas, mutables e indexadas
Se puede acceder a los valores indicando entre un corchete la clave o con el método get('clave')
· tuplas (tuple) que son conjuntos de datos ordenados e inmutables del mismo tipo encerrados entre paréntesis (a, b)
se puede acceder al valor indicando la posición que ocupa
Nota: para crear tuplas de un solo elemento hay que poner una coma al final
tup = ("moto",)

· rangos (range) que podemos definir mediante la función range()
· conjuntos (set) y (frozenset) que almacenan variables no ordenadas y no indexadas definidos entre llaves
{"coche", "moto"}

Se usa la función len(variable) para obtener la longitud de los tipos iteradores
Nota: una cadena de texto se puede iterar para obtener cada char individualmente

Y datos binarios:
· bytes definidos con b"cadena"
· bytearray definidos como bytearray(10)
Nota: Como hemos dicho, Python tiene un tipado dinámico y no se especifica el tipo de valor al crear la variable.
Pero se puede consultar de que tipo es la variable con la llamada

type(variable)

Cuando se instancia un objecto se le asigna una posición de memoria que podemos consultar con

id(obj)
Existen objetos mutables e inmutables. Un objeto mutable puede cambiar su estado o contenido pero uno inmutable no.
Los objetos mutables son las listas, los diccionarios, los sets y los byte arrays.
Así pues cuando se pasan objetos inmutables a las funciones, estas no lo pueden cambiar, pero cuando se pasan objetos mutables a las funciones, estas si pueden alterarlo. Habitualmente se puede hacer una copia del objeto si se desea alterarlo dentro de la función pero no fuera.

Existen varios operadores:
para asignar un valor (x=3)
para operar con números (+,-,*,/,**,//,%)
para comparar (==, !=, <, >, <=, >=)
para lógica (and, or, not)
para operaciones de bit (&,|,^,<<, >>)

Para crear funciones se usa la palabra reservada def
las funciones reciben parámetros definidos en la función o un número indeterminado de parámetros colocando un * es decir def mifuncion(*vars): que recibe una tupla de variables.
Mi función puede tener valores por defecto especificando el valor en la definición def mifuncion(nombre="Juan"):

Las funciones puede devolver valores o variables con la palabra reservada return

Python también es un lenguaje orientado a objetos. Para ello las clases se organizan en paquetes o módulos que se definen al principio del código fuente como norma general.
Para utilizar estos paquetes o módulos desde otras clases se usa (import modulo) o (from modulo import clase)

Una clase consta de propiedades y métodos (más el constructor definido como __init__(self, propiedades).
Las propiedades son variables u otras clases, y los métodos definen el comportamiento que se realiza con esas propiedades. El esquema de un método es:

Para definir una clase se realiza del siguiente modo:

class MiClase:
    __init__(self, propiedad1, propiedad2, ...):
    metodo1: 
    metodo2: 
    etc 

Cuando tenemos definida una clase, podemos crear instancias de ella, es lo que llamamos objetos de esa clase. Se realiza mediante la asignación y la clase entre paréntesis p = Persona(nombre="Juan")
Luego podemos acceder a sus propiedades y métodos con el punto .

obj = MiClase()

A veces se utilizan varios métodos con el mismo nombre, que suelen hacen lo mismo (aunque pueden hacer otras cosas) pero con argumentos diferentes, es lo que se llama "sobrecargar" un método.

Constructor

Habitualmente para inicializar un objeto se usa el constructor. El constructor es un método especial, que se llama __init()__ y que no devuelve ningún valor. Se encarga de inicializar las propiedades de la clase. También se puede sobrecargar el constructor para que funcione con argumentos diferentes.

Visibilidad

Aunque Python no usa modificadores para definir la visibilidad de una variable o de un método, se suele usar una convención: el subrallado _ para definir una variable, función privada.

Herencia

Una clase puede heredar las propiedades y los métodos de otra clase mediante la definición de las clases entre paréntesis. Es lo que se llama una subclase. Esto es útil para no duplicar código y para evitar errores. Se permite heredar de varias clases al mismo tiempo. Hay que comentar que los constructores no se heredan entre ellas.

Así por ejemplo podemos definir una clase "Vehículo" y subclases "Coche" y "Moto".

Ejemplo de objetos

Abre el ejemplo Objetos.py, y ejecuta para ver el resultado.

Podemos encontrar dos tipos de errores: los de parseo y las excepciones. Los errores de parseo son errores de syntaxis al ejecutar el intérprete de Python y nos avisa del error con una flechita. Los errores en tiempo de ejecución se denominan excepciones.

Cuando salta un Error el flujo del programa se acaba. Estos pueden ocurrir por ejemplo cuando se accede a un método de un objeto nulo, un fichero que no se encuentra, un error de comunicaciones, etc. Nosotros podemos definir nuestras propias excepciones para controlar el flujo del programa.

Para tratar las excepciones se utilizan las palabras try: except: else: y raise.

En el try: se pone el código que puede lanzar errores

En el except se captura el tipo de Error concreto, (o varios).

Y en else se pone código que se ejecuta si el try no lanza un error.

La palabra raise se especifica a nivel de método para indicar que lanza ese error hacia arriba, ya que si una Exception no se captura, se lanza al método que nos ha invocado préviamente.

import sys

try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Error al convertir dato a un entero.")
except:
    print("Error no esperado:", sys.exc_info()[0])
raise
Si te gusta este tutorial, puedes contribuir anónimamente con unos tokens BAT.
No conoces Brave? el navegador web que permite navegar más rápido y respetando tu privacidad.

Python dispone de varias librerías para el tratamiento de entrada y salida (E/S).
También dispone de paquetes específicos para E/S de ficheros con JSOn, para guardar estructuras de datos con JSON.

E/S con ficheros

Hay varios tipos de métodos de E/S. open retorna un objeto fichero, se le pasa el parámetro nombre de fichero y modo (r - lectura, w - escritura, a - append.

Se suele usar la sentencia with para abrir recursos y luego liberarlos. Para leer datos se usa el método read() y para leer líneas se usa readline(). Para grabar datos se usa el método write()

with open('fichero') as f:
    read_data = f.read()

Guardar datos con JSON

Para trabajar con ficheros JSON se suele usar import json.

Se usa el método dump para guardar el objeto a un fichero de texto y load para cargarlo de disco. Estos métodos soportan listas y diccionarios.

//x es un objeto cualquier y f un descriptor de fichero
json.dump(x, f)
x = json.load(f)

Para verlo en funcionamiento abre el DatosJSON.py.

Si te gusta este tutorial, puedes contribuir anónimamente con unos tokens BAT.
No conoces Brave? el navegador web que permite navegar más rápido y respetando tu privacidad.

El lenguaje Python, permite realizar accesos a urls de Interet, y a los protocoles de Internet como el smtp.

Las clases principales se encuentran en el paquete urllib y smtplib.

URLs

Para localizar y acceder a cualquier recurso en Internet podemos usar el método urlopen. Uno de los protocolos más conocidos es http. Para crear un objeto URL podemos proceder así:

from urllib.request import urlopen
with urlopen('http://tutoriales.online') as response:
   for line in response:
       line = line.decode('utf-8')  
       print(line)

Ejemplo para leer una URL

Abre el ejemplo LeeURL.py, y ejecuta para ver el resultado.

SMTP

A veces necesitamos crear aplicaciones para tratar con el protocolo smtp y poder enviar correos.

Habitualmente se crea un objeto server y se invoca al método sendmail.

import smtplib
 
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("EMAIL", "PASSWORD")
  
msg = "Tu mensaje de correo a enviar"
server.sendmail("EMAIL", "EMAIL DESTINATARIO", msg)
server.quit()

Ejemplo de correo

Abre el ejemplo EnviarCorreo.py, y ejecuta para ver el resultado.

Si te gusta este tutorial, puedes contribuir anónimamente con unos tokens BAT.
No conoces Brave? el navegador web que permite navegar más rápido y respetando tu privacidad.

Una de las funcionalidades que podemos usar para realizar tareas de fondo son los threads. Se usa el paquete threading para la gestión de los threads.

En esta sección sólo vamos a dar cuatro pinceladas de la concurrencia, ya que se podría dedicar un tutorial entero sólo a ello.

Para crear una clase que sea capaz de ejecutar código en un proceso aparte, se crea la clase que herede de threading.Thread. La clase debe implementar un método __run(self)__. Una vez definida esa clase se crea un objeto y se llama al método start().

Podemos ver el siguiente ejemplo para crear una clase que es un thread:

import threading, zipfile

class AsyncZip(threading.Thread):
    def __init__(self, infile, outfile):
        threading.Thread.__init__(self)
        self.infile = infile
        self.outfile = outfile

    def run(self):
        f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
        f.write(self.infile)
        f.close()
        print('Finalizado el proceso zip de:', self.infile)

background = AsyncZip('mydata.txt', 'myarchive.zip')
background.start()
print('El main continua ejecutandose en primer plano.')

background.join()    # Espera que la tarea en segundo plano finalice 
print('El main espera hasta que finalice la tarea de fondo.')

Ejemplo con un thread

A continuación abre el ejemplo Multitarea.py. Luego ejecuta la clase Multitarea que es la que contiene el método main.

Si te gusta este tutorial, puedes contribuir anónimamente con unos tokens BAT.
No conoces Brave? el navegador web que permite navegar más rápido y respetando tu privacidad.
 ◂ 
 ▸