Tag : python

El Zen de Python

El veterano Tim Peters enunció 20 bellos aforismos que fueron tomados en cuenta para el diseño de Python de los cuales solo 19 han sido escritos.

  1. Lo bello es mejor que lo feo.
  2. Explícito es mejor que implícito.
  3. Simple es mejor que complejo.
  4. Complejo es mejor que complicado.
  5. Plano es mejor que anidado.
  6. Es mejor escaso que denso.
  7. La legibilidad cuenta.
  8. Los casos especiales no son lo suficientemente especiales como para romper las reglas.
  9. Aunque la practicidad vence a la pureza.
  10. Los errores nunca deben pasar de forma silenciosa.
  11. A menos que sean silenciados explícitamente.
  12. Ante la ambigüedad, rechaza la tentación de adivinar.
  13. Debe haber una, y preferiblemente solo una, forma obvia de hacerlo.
  14. Aunque esa forma puede no ser obvia al principio, a menos de que seas holandés.
  15. Ahora es mejor que nunca.
  16. Aunque a menudo nunca es mejor que «ahora mismo».
  17. Si la implementación es difícil de explicar, es una mala idea.
  18. Si la implementación es fácil de explicar, puede ser una buena idea.
  19. Los «namespaces» son una gran idea, ¡hagamos más!


El ciclo for en Java, Golang y Python

Haremos una pequeña comparación en la forma en la que puedes usar el ciclo for en cada uno de estos lenguajes de programación.

Esta comparación es con propósitos educativos, si vas comenzando en mundo de la programación es bueno que conozcas los detalles básicos de algunos de los lenguajes de programación más ampliamente usados.

Comenzaremos por Java, la estructura básica de la sentencia for es la siguiente:

//Estructura de la sentencia for básica
for (inicialización; terminación; incremento) {
    sentencias
}

Desde luego el bloque de código anterior no compilaría, es sólo una descripción general y en realidad es una estructura que siguen muchos lenguajes cuya sintaxis han heredado del lenguaje de programación C. Un ejemplo real es el siguiente:

public class CicloFor {
    public static void main(String args[]){
        for (int i = 0; i < 10; i++) {
            System.out.println("valor de i: " + i);
        }
    }
}

Como seguramente has notado, es necesario que dentro de la sentencia for, existan tres sentencias más que establecen lo siguiente:

  • Inicialización – Que en el ejemplo es la variable i con un valor inicial int i =0
  • Terminación – El ciclo for se ejecuta mientras i es menor que 10
  • Incremento – Donde el valor de i cambia mientras la sentencia de terminación no se cumpla con i++

El ciclo for en Golang es similar al de Java, pero en su sentencia se omiten algunos caracteres:

package main
import "fmt"

func main() {
	for i := 0; i < 10; i++ {
		fmt.Println("valor de i: ", i)
	}
}

En Go no ha sido necesario incluir los paréntesis, ya que sus creadores han decidido omitirlos y basta con saber que las sentencias de inicio, terminación e incremento se encuentran entre la palabra for y el corchete que abre el bloque del ciclo.

Veamos ahora el ciclo for con Python.

for i in range(10):
    print("valor de i: ", i)

Python es el campeón a la hora de minimizar la cantidad de código que se requiere escribir.

En Python, se especifica la sentencia for, una variable y el rango en el cual esa variable estará cambiando y automáticamente sabrá cuando detenerse. Como puedes ver no es necesario agregar las sentencias de terminación e incremento. El compilador sabe que el valor de i, irá de 0 a 9 con la ayuda de la función range.

Además de que en Python no es necesario crear un método o función main, tampoco es necesario usar corchetes que abren y cierran. El compilador sabe que el bloque del for que se ejecutará, es el que se encuentre desplazado por dos espacios o un tabulador adicional al que tiene la sentencia for.

El resultado al ejecutar el código en todos los casos es similar al siguiente:

valor de i:  0
valor de i:  1
valor de i:  2
valor de i:  3
valor de i:  4
valor de i:  5
valor de i:  6
valor de i:  7
valor de i:  8
valor de i:  9

En Java existen otras variantes de la sentencia for, en Python algunas otras, y en Go sólo es esa.

Estos ejemplos ilustran los estilos de construcción de cada lenguaje, pero no es lo único que debes considerar a la hora de crear aplicaciones.

Java es un lenguaje interpretado al igual que Python, lleva tiempo en el mercado y está un poco más optimizado que Python, existen para este lenguaje una cantidad inmensa de bibliotecas o librerías que te facilitarán muchos otros aspectos del desarrollo de software, en Python también existen muchas herramientas y sigue creciendo.

Python, por su sencillez, permite hacer prototipos de aplicaciones, algoritmos o ejemplos de código mucho más rápido que en los otros lenguajes.

Golang es el nuevo del grupo, aunque la cantidad de caracteres que requerirás para crear el mismo algoritmo está entre Java y Python, se destaca por ser un lenguaje que al ser compilado genera archivos ejecutables, (Java y Python son interpretados). Su desempeño puede ser mucho más rápido y se está volviendo el favorito en soluciones donde sea necesario optimizar el rendimiento.

Esperamos pronto hacer algunas otras comparativas.


Librerías Más Usadas en Python

Estas son algunas de las librerías para Python más usadas y que quizá deberías conocer si estás aprendiendo el lenguaje. Son bastante útiles, te facilitarán el desarrollo de aplicaciones avanzadas y podrás usarlas con la confianza de que funcionan y están siendo actualizadas constantemente.

  1. requests
  2. tqdm
  3. pillow
  4. scrapy
  5. numpy
  6. pandas
  7. scapy
  8. matplotlib
  9. kivy
  10. nltk
  11. keras
  12. SQLAlchemy
  13. Django
  14. Twisted



requests

Es según sus creadores Python HTTP para humanos. La librería requests te permitirá hacer peticiones por http de una manera sencilla.  Cuando se hace una petición, requests automáticamente decodificará el contenido extraido de un servidor y la mayoría de caracteres unicode serán decodificados correctamente.

En este ejemplo sencillo:

import requests
r = requests.get('https://www.google.com')
print(r.text)

El resultado es el siguiente:

La página de [requests]

tqdm

Barras de progreso para PythonLas barras de progreso son bastante útiles porque ayudan a hacer que los trabajos de procesamiento de datos sean menos dolorosos entre otras cosas porque mostrarán una estimación confiable de cuánto tiempo tomará y el porque el usuario puede ver de inmediato si una tarea se ha detenido.

En el siguiente ejemplo:

from tqdm import tqdm
from time import sleep

for i in tqdm(range(1000)):
    sleep(0.01)

El resultado es el siguiente:

La página de [tqdm]

pillow

Una herramienta para manipular imágenes. Es un fork de PIL y es más fácil de usar, bastante útil si trabajas con imágenes frecuentemente.

A continuación un pequeño ejemplo:

from PIL import Image
size = (128, 43)
saved = "/home/decodigo/Documentos/python/archivos/logo_python_2.png"
try:
    im = Image.open("/home/decodigo/Documentos/python/archivos/logo_python.png")
except ValueError:
    print("Unable to load image")
im.thumbnail(size)
im.save(saved)
im.show()

El resultado será una ventana con la imagen de tamaño diferente. Antes de mostrar la ventana se creará una nueva imagen con el tamaño asignado.

La página de [pillow]

scrapy

Scrapy es framework que te permitirá rastrear sitios web y extraer datos estructurados que pueden utilizarse para una amplia gama de aplicaciones, como la extracción de datos, el procesamiento de información o el archivo histórico.

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']
    def parse(self, response):
        for title in response.css('.post-header>h2'):
            yield {'title': title.css('a ::text').get()}
        for next_page in response.css('a.next-posts-link'):
            yield response.follow(next_page, self.parse)

Aunque Scrapy fue diseñado originalmente para el rastreo web, también se puede usar para extraer datos con APIs (como los Amazon Associates Web Services) o como un rastreador web de propósito general.

Para entender más como configurar un proyecto es mejor ir a la página del proyecto.

La página de [scrapy].

NumPy

NumPy es el paquete más usado para computación científica con Python. Contiene, entre otras cosas:

  • Un poderoso objeto de matriz N-dimensional
  • Funciones sofisticadas (broadcasting)
  • Herramientas para la integración de código C / C ++ y Fortran.
  • Álgebra lineal útil, transformada de Fourier y capacidades de números aleatorios.

La página de [numpy]

pandas

Pandas es una biblioteca de código abierto con licencia BSD que proporciona estructuras de datos de alto rendimiento, fáciles de usar y herramientas de análisis de datos para el lenguaje de programación Python.

Pretende ser un bloque de construcción fundamental para realizar análisis prácticos de datos del mundo real con Python. Pandas es muy extenso y para entender mejor todo lo que puedes hacer es mejor pasar por la página del proyecto.

La página de [pandas]

scapy

Scapy permite enviar, rastrear y diseccionar y falsificar paquetes de red. Esta capacidad permite la construcción de herramientas que pueden sondear, escanear o atacar redes.

En otras palabras, Scapy es un poderoso programa interactivo de manipulación de paquetes. Es capaz de forjar o decodificar paquetes de una gran cantidad de protocolos, enviarlos por cable, capturarlos, hacer coincidir solicitudes y respuestas, y mucho más. Scapy puede manejar fácilmente la mayoría de las tareas clásicas como escaneo, rastreo de rutas, sondeo, pruebas unitarias, ataques o descubrimiento de redes. Puede reemplazar hping, arpspoof, arp-sk, arping, p0f e incluso algunas partes de Nmap, tcpdump y tshark)

La página de [scapy]

Matplotlib

Matplotlib es una biblioteca de trazado 2D que produce gráficas de buena calidad en una variedad de formatos  y entornos interactivos. Podrás generar gráficas, histogramas, espectros de potencia, gráficas de barras, gráficas de errores, diagramas de dispersión, etc., con unas pocas líneas de código.

La página de [Matplotlib]

Kivy

Kivy es una biblioteca de software de código abierto para el rápido desarrollo de aplicaciones equipadas con interfaces de usuario novedosas, como las aplicaciones multitáctiles. Es proyecto multiplataforma con un módulo para Python 2 y Python 3.

La página de [kivi]

NLTK

NLTK es una plataforma líder para la creación de programas en Python para trabajar con datos en lenguaje humano. Proporciona interfaces fáciles de usar para más de 50 recursos corporales y léxicos, como WordNet, junto con un conjunto de bibliotecas de procesamiento de texto para clasificación, tokenización, derivación, etiquetado, análisis y razonamiento semántico, wrappers para bibliotecas NLP muy solidas.

La página de [NLTK]

Keras

Keras es una API de redes neuronales de alto nivel, escrita en Python y capaz de ejecutarse sobre TensorFlow, CNTK o Theano. Fue desarrollada para permitir a los desarrolladores experimentación rápida. Con al filosofía de «Poder pasar de la idea al resultado con el menor retraso posible es clave para hacer una buena investigación».

La página de [Keras]

SQLAlchemy

SQLAlchemy es el kit de herramientas SQL para Python y un mapeador relacional de objetos que ofrece a los desarrolladores de aplicaciones el máximo poder y flexibilidad de SQL.

Proporciona un conjunto completo de patrones de persistencia conocidos a nivel empresarial, diseñados para el acceso a bases de datos eficientes y de alto rendimiento.

La página de [SQLAlchemy]

Django

Django es un framwork web para Python de alto nivel que fomenta el desarrollo rápido y el diseño limpio y pragmático. Creado por desarrolladores experimentados, se encarga de gran parte de las complicaciones del desarrollo web, por lo que podrás concentrarte en escribir aplicaciones sin necesidad de reinventar la rueda. Es gratis y de código abierto.

La página de [django]

Twisted

Twisted es un framework de red que se basa en el paradigma de la programación dirigida por eventos, quiere decir que los usuarios de Twisted pueden escribir pequeños callbacks (retrollamadas) predefinidos en el framework para realizar tareas complejas. Está bajo la licencia MIT.

La página de [Twister]


Un diagrama casi completo de las Redes Neuronales

Existe una amplia variedad de tipos de redes neuronales y a veces es necesario un mapa para navegar entre muchas arquitecturas y enfoques emergentes.  Fjodor Van Veen del instituto Asimov compiló una maravillosa variedad de topologías de redes neuronales.

Mas info:www.asimovinstitute.org