El lenguaje de programación Python es quizás el que más se acerca a un pseudocódigo, o dicho de otro modo, se siente más cercano a un lenguaje natural que otros lenguajes de programación, por lo que podría plantearse aprender directamente a codificar con Python para obtener un resultado concreto y sin necesidad de teoría de pseudocódigos. Las áreas que cubre este lenguaje son variadas, incluyendo cadena de bloques (blockchaoin) y aprendizaje de máquina (machine learning - ML).
Python es un lenguaje en principio interpretado con implementaciones para diversos entornos, siendo posible incluso su ejecución dentro de .Net
(con IronPython
o Python.NET
) y la Máquina Virtual de Java (con GraalVM
o Jython
), y por supuesto lo que hace las veces de una máquina virtual denominada CPython
(la implementación oficial y altamente usada). Esta característica también cuenta a la hora de darle acogida para un proyecto, sin embargo, al ser interpretado no suele ser tan rápido y no es su naturaleza generar un archivo binario para distribuirlo (aunque existe mecanismo para estos casos, por ejemplo: pyinstaller, py2exe, cx_freeze o nuitka). También puedes combinar Python con Rust o C para tomar lo mejor de cada lenguaje y obtener mayor rendimiento.
Esta es una referencia ágil para quién tenga nociones de programación o codifique con algún otro lenguaje, también a modo de repaso y uso frecuente. Siendo así, tener esta información como memoria te resultará simple de acceder a los fundamentos, incluso como prueba de concepto sobre el lenguaje.
print("Hi there!")
Este programa en
Python
imprime un saludo en la pantalla. Ten presente que cada instrucción de lógica enPython
correspondería a una línea de código.
Si lo quieres probar lo que hace y tienes un sistema operativo Linux o macOS seguramente se encuentra instalado, más si usas Windows debes descargarlo del sitio oficial e instalarlo ejecutando el archivo respectivo.
Una vez instalado, puedes abrir una terminal de línea de comandos, ejecutar el comando python
(tal y como se observa) y luego de que inice copias y pegas la línea de código print("Hi there!")
. Para salir puedes presionar las teclas CTRL+D
.
Para quien tenga habilidades, experticia en programación y/o requiera agilidad en conceptos técnicos, pueden resumirse los siguientes tips esenciales del lenguaje:
def
, luego los parámetros van entre paréntesis (...)
y posteriormente :
. Los parámetros se separan con coma ,
. Además, se usa return
para retornar un valor. La función principal de un programa se denomina main
pero puede existir un programa sin ésta función.:
. Generalmente, cada línea posterior corresponde a una sentencia. No aplican los corchetes de otros lenguajes ni el punto y coma, por lo que la indentación del código toma mayor importancia para legibilidad del mismo.C
, Java
, Javascript
, Kotlin
, pero encuentras una forma equivalente para el uso de if
, for
, while
, incluso para el manejo de excepciones (try
), cuyas palabras clave deben llevar a continuación el caracter :
.__init__
y la clase se define con la palabra reservada class
el nombre asignado y posteriormente :
.Javascript
y Typescript
, el uso de JSON en Python
es prácticamente nativo, comprendiendo que no es un tipo o estructura natural del lenguaje.Recordando que la variable es como un dato a tener en cuenta (en memoria), se puede expresar una variable simplemente asignándola con el operador igual (=
). Cada vez que se mencione o use posteriormente la variable, esta debe aparecer con el mismo nombre original (respetando mayúsculas y minúsculas).
Ejemplo:
variable = "Ana"
i = 0
print(variable)
En programación de computadoras las variables tienen un tipo de dato que indica la naturaleza del contenido, por ejemplo, si una variable contiene un texto (string
) o si es un número entero (integer
) o flotante (float
), incluso si se trata de un valor verdadero o falso (boolean
), o una lista (array
). Si prefieres, puedes usar funciones simples para establecer el tipo de datos, usando str()
, int()
, float()
, bool()
, list()
, veamos el ejemplo:
variable = str()
i = int()
f = float()
imagine = bool()
l = list()
Las funciones se relacionan con lógica en bloques bien definidos según se organicen, y para el caso de Python se antepone def
. Ten presente que esa línea en partícular debe terminar con dos puntos (:), veamos a continuación.
def myfunction():
print("Hi there!")
myfunction()
Veamos otro ejemplo.
def myfunction2(name):
return name
En este caso se usa
return
para devolver el valor contenido en la variable. Alternativamente, se puede usarpass
cuando no retornas nada.
Los comentarios ofrecen indicaciones para legibilidad y comprensión del código pero no tienen efecto en la ejecución del programa, es decir, van dirigidos a la documentación del código o al equipo.
# Esto es un comentario de fin de línea
"""
Este es un comentario de bloque
"""
Las condiciones permiten determinar los puntos de validación en la lógica que se plantee. Por ejemplo, imagina que vas a comprar una bebida para alguien que te la encargó y llevas planteados unas posibles escenarios en caso de que no se encuentre la bebida originalmente solicitada. Ten presente que esas líneas en partícular en Python
deben terminar con dos puntos (:), veamos a continuación.
if i == 1:
print("coffee")
else:
print("tea")
if
da la apertura a plantear una condición inicial, mientraselse
correspondería a lo que ocurriría cuando no se cumple la condición. Además se puede usarelif
(que sería como abreviar else if) para evaluar otras condiciones determinadas, como en el siguiente ejemplo.
if i == 1:
print("coffee")
elif i == 2:
print("tea")
else:
print("aha")
Los ciclos se refieren a instrucciones que se repiten o en donde se da lugar a iteraciones. Ten presente que la línea del for
debe terminar con dos puntos (:), veamos a continuación.
names = ["Ana", "Alex", "Janeth"]
for x in names:
print(x)
if x == "Alex":
break
Nótese que la variable
names
es una lista de valores de texto (también conocida con el nombre de arreglos) cuya convención usa corchetes[]
separando cada valor por una coma. Cuando se usabreak
se interrumpe el ciclo, dado que está bajo una condición se imprimirían los nombres hasta que se de lugar a la condición (por tanto no se imprimiría Janeth).
Se puede usar la funcion range
para recorrer un rango, incluso combinarla con len
que obtiene el tamaño de un arreglo. Veamos un par de ejemplos:
for i in range(10):
print(i)
n = [10, 20, 30, 40]
for i in range(len(n)):
print(n[i])
En estos casos se termina el ciclo cuando se alcanza el tope (restando 1).
range
puede usarse también dos parámetros indicando el primero el inicio y el segundo el tope. Su tercera manera de llamarse es con un tercer parámetro que indicaría un incremento (en caso de ser distinto de 1).
Otra manera de plantear un ciclo de iteraciones delimitándolo con una condición es usando while
, de modo que se ejecuta el código mientras cumpla la condición. Suele requerir de inicialización de una variable, la condición de terminación del ciclo y un incremento. Ten presente que esa línea del while
debe terminar con dos puntos (:), veamos a continuación.
i = 0
while i < 10:
i += 1
print(i)
Las excepciones se originan cuando se interrumpe la lógica esperada debido a un error en medio de la ejecución del programa de modo que podríamos gestionarlas, en otras palabras, son útiles para manejo de errores de caracter técnico.
try:
print(n)
except:
print("error")
else:
print("ok")
finally:
print("end")
try:
indica que se inicia un bloque de código controlado y que en caso de una excepción se pasa al bloque correspondiente aexcept:
, Por último siempre se ejecutaría lo que se indique bajofinally:
(si se indica, puesto que es opcional).
En Python existe la sentencia with open (...) as xfile:
que permite leer un archivo y procesar cada línea. Veamos un ejemplo dónde se abre un archivo para lectura:
import json
with open("file.json", "r") as myfile:
data = json.loads(myfile)
Este ejemplo sirve también para ilustrar que se importa con
import
una librería o módulo para trabajar nativamente conJSON
.
En caso de tener una página web y python instalado, si requieres visualizar tu sitio web como si estuviera operando en Internet (pero localhost
), podrías ubicarte en la ruta de tus archivos, abrir una terminal (o consola) y ejecutar:
python -m SimpleHTTPServer 8000
Para Python 3+ usas:
python -m http.server 8000
Prueba abrir en un navegador la dirección:
localhost:8000
Para instalarPython
mira los pasos a continuación.
Veamos esto con un ejemplo implementación de cliente HTTP
que obtiene información de una API…
import requests
import json
def on_get():
data = { 'name': 'John', 'age': 30 }
url = "http://localhost:8080/"
resp = requests.post(url, data = json.dumps(data))
return resp.text
En ciertos sistemas como macOS y Linux encuentras este lenguaje instalado. Veremos a continuación la instalación de Python 3.7+
bajo Windows. Para ello, nos dirigimos al sitio y descargamos el instalador de la versión 3, generalmente a 64 bits. Es conveniente revisar si tienes instalada la versión de Python 2.7
y desinstalarla primero del sistema Windows.
Una vez inicias el instalador y sigues paso a paso un proceso corto, debe quedarte Python
en una ruta como: C:\Users\myuser\AppData\Local\Programs\Python\Python39\
Puedes abrir una terminal y digitar el comando
py
para probar un código esencial como:print("Hi there!")
Para salir de ese interprete interactivo debes digitar las teclas:CTRL
+Z
yENTER
Puedes verificar la version instalada del lenguaje y del gestor de paquetes del lenguaje llamado pip
ejecutando:
python --version
pip --version
A continuación haremos un ejercicio sencillo de un servidor web utilziando FastAPI
que es un Framework moderno para aplicaciones web asíncronas con Python
. Debes tener instalada la versión de Python 3.6+ y un par de librerías con los siguientes comandos:
pip install fastapi
pip install uvicorn
Abrimos un archivo con nombre main.py
que tendrá el siguiente código:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"Hi": "there!"}
La notación
@app.get
se asocia a la ruta web.
Para lanzar el servicio ejecutamos:
uvicorn main:app --reload
Para ver el resultado, debes abrir un navegador y consultar la dirección:
http://127.0.0.1:8000
Bottle es una Librería clásica para aplicaciones web con Python
, y a mi parecer pasa desapercibida en tiempos recientes pero encuentro gran potencial. Esta librería nació en el mismo contexto de Django y Flask (que son compatibles con WSGI
), por lo que no es tan rápida como FastAPI. Sin embargo, el hecho de ser una librería sencilla para aprender y que brinda las prestaciones necesarias para desarrollar proyectos que puedan correr en servicios económicos de hospedaje web, incluso puede utilizarse desde Jython
(generando un jar
para llegar a lograr binarios con GraalVM
que ejecuta el programa más rápido), la hace una candidata a ser rescatada o considerada para un proyecto con Python
como el que abordaremos.
Como decía, Bottle
es un librería sencilla, eficiente y liviana, sin dependencias, criterios que busco en varios proyectos. Usa decoradores como @route
, @get
, @post
, y algunos otros, para indicar las rutas asociadas a un método o función de nuestro programa. Veamos como instalarla para un nuevo proyecto.
Nos ubicamos en una carpeta que se use como espacio de trabajo, dónde se pueden crear nuevas subcarpetas para proyectos, y ejecutamos respectivamente lo siguiente:
mkdir project
cd project
pip install bottle
project
corresponde a la carpeta del proyecto pero puede ser nombrada a gusto.
Abrimos un archivo con nombre webapp.py
que tendrá el siguiente código:
from bottle import run, route
@route("/")
def index():
return 'Hi there!'
@route("/hello")
def hello():
return {"Hi": "there!"}
run(port=8080, debug=True, reloader=True)
En este ejercicio, vemos que se puede retornar un texto o usar la ruta
/hello
que devuelve unjson
de modo natural.
Para ejecutar el programa usamos la sentencia:
python webapp.py
Para ver el resultado, debes abrir un navegador y consultar la dirección:
localhost:8080
ylocalhost:8080/hello
Veamos ahora una variación considerando el siguiente contenido:
from bottle import run, route
with open("index.html") as f:
html = f.readlines()
@route("/")
def index():
return html
@route("/hello")
def hello():
return {"Hi": "there!"}
if __name__ == '__main__':
run(host='localhost', port=8080, debug=True, reloader=True)
else:
application = app
En las primeras líneas se lee un archivo
index.html
(with open(...) as
) para mostrarlo con la primera ruta.
Las últimas 4 líneas correpondientes alif
se relacionan con el inicio del servicio. Aunque la línea con el métodorun(port=8080)
es la que invoca el servicio, de este modo puede combinarse para ser usada por servidores como Nginx o Phusion Passenger.
Un archivo index.html
debe existir en la misma ruta y con un contenido, por ejemplo:
<h1>Hi there!</h1>
Gracias a WebAssembly (tecnología que permite ejecutar cierto tipo de binarios para la web, alternativa a Javascript) encontramos proyectos como PyScript que permiten correr Python en el navegador. A modo de abre-bocas, veamos la estructura de un ejemplo esencial y convencional para darnos una idea…
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://pyscript.net/releases/2024.1.1/core.css">
<script type="module" src="https://pyscript.net/releases/2024.1.1/core.js" defer></script>
</head>
<body>
<py-script>
print("Hi there!")
</py-script>
</body>
</html>
Puedes crear un archivo
index.html
en una carpeta y desde la línea de comandos puedes inciar un servicio así:python -m http.server 8000
Según la documentación oficial de PyScript, podrías mostrar un marco de terminal, por ejemplo usando: <script type="py" terminal>print("Hi there!")</script>
Si necesitas importar librerías, antepones un bloque como en el siguiente ejemplo:
<body>
<py-config type="toml">
packages = ["arrr"]
</py-config>
<script type="py" terminal>
import arrr
output = arrr.translate("Hi there from python!")
print(output)
</script>
</body>
Puedes dirigirte a la documentación de PyScript para comprender mejor su modo de uso.
Jython es la implementación de Python 2.7 para la JVM. Para usarlo podemos incorporar la configuración de la librería respectiva en Maven a través del archivo pom.xml
de nuestro proyecto, es decir, copiar y pegar el siguiente bloque dentro de las dependencias (<dependencies>
):
<dependency>
<groupId>org.python</groupId>
<artifactId>jython-slim</artifactId>
<version>2.7.2</version>
</dependency>
Sin embargo, también podemos usarlo directamente con la versión Standalone
que se descarga desde el sitio de Jython. Con esto obtienes un archivo .jar
que puedes renombrar a jython.jar
o reinterpretar el siguiente ejemplo:
java -jar jython-standalone-2.7.2.jar hello.py
Encuentras el comando
java
que invoca la libreríajython*.jar
, la cual a su vez interpreta el archivohello.py
(además pueden pasarse otros datos como parámetros)
Un marco de trabajo brinda una serie de mecanismos que pueden ser utiles en ciertos proyectos. Veamos a continuacion como iniciar con Django teniendo Python instalado.
pip3 install virtualenv
virtualenv env
source env\\Scripts\\activate
pip3 install Django
django-admin startproject project
mv project run
cd run
python manage.py runserver
La linea correspondiente a
source
varia en Linux asi:source env/bin/activate
La linea correspondiente adjango-admin
inicializa la carpetaproject
pero se renombra arun
y luego se inicia el entorno de ejecucion
Cancelamos el entorno (usando CTRL+C
) y luego ejecutamos la migracion para crear la base de datos asi:
python manage.py migrate
Podemos crear un usuario para administrar el entorno de Django asi:
python manage.py createsuperuser --username=myuser [email protected]
Para agregar un modulo de aplicacion se ejecuta lo siguiente:
python manage.py startapp app
app
corresponderia al nombre asignado a la aplicacion o modulo.
Se debe reportar esta aplicacion en el archivosettings.py
(ubicado en la carpeta con el nombre del proyecto) dentro de la listaINSTALLED_APPS
.
Django gestiona el modelo de datos y para sincronizar esto con la base de datos se realiza un proceso de migracion usando:
python manage.py makemigrations