Trucos útiles de Python

Trucos útiles de Python

@programacion
https://unsplash.com/photos/zGuBURGGmdY

Python es uno de los lenguajes de programación más populares y demandados del mundo. Y hay muchas razones para esto:

Fácil de aprender, mega-universal; Gran variedad de módulos y bibliotecas.

Uso Python todos los días; es una parte integral de mi trabajo como científico de datos. Durante mi carrera, descubrí varios trucos y trucos útiles.

En este artículo, traté de estructurarlos en orden alfabético.

La mayor parte de esto lo he experimentado o usado en mi trabajo. Se encontró algo en la documentación de las bibliotecas estándar de Python. Y se encontraron algunas cosas en PyPi .

Otra cosa a tener en cuenta es que encontré cuatro o cinco trucos en awesome-python.com . Esta es una lista seleccionada de cientos de las herramientas y módulos más interesantes para Python. ¡Muy inspirador de ver!

Todo o Cualquiera

Una de las razones de la popularidad de Python radica en su legibilidad y expresividad.

A menudo se escucha que Python se refiere en broma como ' pseudocódigo ejecutable '. Pero es cierto: si escribe un código como este, será bastante difícil discutir con él:

x = [True, True, False]
if any(x):
    print("At least one True")
if all(x):
    print("Not one False")
if any(x) and not all(x):
    print("At least one True and one False")

bashplotlib

¿Quieres trazar gráficos en la consola?

$ pip install bashplotlib

Ahora los tienes.

collections

Python tiene excelentes tipos de datos incorporados, pero a veces no se comportan de la manera que deseas.

Afortunadamente, el módulo de colecciones está incluido en la biblioteca estándar de Python . Esta útil adición ofrece tipos de datos extendidos.

from collections import OrderedDict, Counter
# Remembers the order the keys are added!
x = OrderedDict(a=1, b=2, c=3)
# Counts the frequency of each character
y = Counter("Hello World!")

Directorio

¿Alguna vez te has preguntado cómo puedes mirar dentro de un objeto de Python y ver todos sus atributos? Por supuesto.

Desde la línea de comando:

>>> dir()
>>> dir("Hello World")
>>> dir(dir)

Esta función es extremadamente útil cuando se ejecuta Python de forma interactiva o se trabaja con objetos y módulos dinámicos.

Puedes leer más aquí .

Emoticonos

Sí, son los mejores.

$ pip install emoji

No finjas que no volverás a intentarlo...

from emoji import emojize
print(emojize(":thumbs_up:"))

?

importar desde __future__

Una consecuencia de la popularidad de Python es el constante desarrollo de nuevas versiones. Las nuevas versiones traen nuevas funciones, a menos, por supuesto, que su versión esté desactualizada.

No hay nada que temer aquí. El módulo_future_ le permite importar funcionalidad de futuras versiones a Python. Sin exagerar, frente a ti hay un viaje en el tiempo real o magia.

from __future__ import print_function
print("Hello World!")

¿Por qué no intentar importar llaves ?

geopy

La geografía puede ser un entorno extremadamente misterioso para los programadores (¡ja, juego de palabras!). Pero con el módulo geopy, las cosas se vuelven sorprendentemente simples.

$ pip install geopy

Su trabajo es abstraer las API de varios servicios de geocodificación, lo que le permite acceder a la dirección completa de una ubicación deseada, su latitud, longitud e incluso su altitud.

Hay otra clase útil: la distancia. Define la distancia entre dos puntos en tus unidades favoritas.

from geopy import GoogleV3
place = "221b Baker Street, London"
location = GoogleV3().geocode(place)
print(location.address)
print(location.location)

howdoi

¿Atascado en algún problema de código y no puede recordar la solución correcta? ¿Quieres ir a StackOverflow pero no quieres salir de la terminal?

Entonces esta herramienta de línea de comandos definitivamente será útil para usted .

$ pip install howdoi

Hágale cualquier pregunta y tratará de darle la respuesta correcta.

$ howdoi vertical align css
$ howdoi for loop in java
$ howdoi undo commits in git

Sin embargo, tenga cuidado: howdoi extrae el código de las respuestas de StackOverflow más populares, por lo que no siempre proporciona la información más útil...

$ howdoi exit vim

inspect

El módulo de inspección es ideal para comprender el "detrás de escena" general de Python. ¡También puedes llamar a sus métodos!

El siguiente código de ejemplo usa inspect.getsource() para imprimir su propio número de línea. Y se usa inspect.getmodule() para imprimir el módulo en el que se definió.

La última línea de código genera su propio número de línea.

import inspect
print(inspect.getsource(inspect.getsource))
print(inspect.getmodule(inspect.getmodule))
print(inspect.currentframe().f_lineno)

Por supuesto, además de ejemplos tan banales, el módulo de inspección será útil para comprender todo lo que sucede con el código. O elíjalo para escribir código autodocumentado.

jedi

Jedi es una biblioteca para autocompletar y análisis de código. Con él, el proceso de escritura de código será más rápido y eficiente.

Bueno, si no está desarrollando su propio IDE, entonces puede usar Jedi como complemento de edición . ¡Afortunadamente, todo esto ya está disponible para descargar!

Es posible que ya estés usando Jedi. El proyecto IPython usa la funcionalidad Jedi para completar el código.

**kwargs

El aprendizaje de cualquier idioma consta de una serie de etapas. En Python, uno de esos pasos es comprender la sintaxis críptica de **kwargs.

Un asterisco doble delante de un objeto de diccionario le permite pasar el contenido de ese diccionario como argumentos con nombre a la función .

Las claves del diccionario son nombres de argumentos, y los valores se convierten en valores pasados ​​a la función. ¡Ni siquiera tienes que llamarla kwargs!

dictionary = {"a": 1, "b": 2}
def someFunction(a, b):
    print(a + b)
    return
# these do the same thing:
someFunction(**dictionary)
someFunction(a=1, b=2)

Esta técnica es extremadamente útil cuando se escriben funciones que pueden manejar argumentos con nombre que no están predefinidos.

Generadores de listas

Una de mis cosas favoritas de la programación en Python es el generador de listas .

Estas expresiones facilitan la escritura de código muy limpio que se lee tan fácilmente como el lenguaje natural.

Puede leer más sobre el uso de listas de comprensión aquí .

numbers = [1,2,3,4,5,6,7]
evens = [x for x in numbers if x % 2 is 0]
odds = [y for y in numbers if y not in evens]
cities = ['London', 'Dublin', 'Oslo']
def visit(city):
    print("Welcome to "+city)
for city in cities:
    visit(city)

map

Python admite la programación funcional con una serie de opciones integradas. Y la más útil de ellas es la función map(), especialmente cuando se combina con funciones lambda .

x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# prints out [2,3,4]
print(list(y))

El ejemplo anterior map()aplica una función lambda simple a cada elemento en x. Devuelve un objeto de mapa que se puede convertir en un objeto iterado (como una lista o una tupla).

newspaper3k

Si nunca ha visto esto antes, prepárese para un lavado de cerebro total con el módulo de periódico en Python .

Puede recuperar artículos de noticias y metadatos relacionados de varias publicaciones internacionales líderes. Puede extraer imágenes, texto y nombres de autores.

El módulo incluso tiene una funcionalidad integrada de procesamiento de lenguaje natural (NLP) .

Si de repente en tu próximo proyecto estabas pensando en recurrir a la ayuda de BeautifulSoup o cualquier otra biblioteca de webscraping DIY, entonces no pierdas tu tiempo y esfuerzo, y siéntete libre de tomarla $ pip install newspaper3k .

Reinicio del operador

Python admite la recarga del operador . Conociendo estas palabras, inmediatamente pareces un verdadero genio de la informática.

En realidad, el concepto es bastante simple. ¿Alguna vez te has preguntado por qué en Python puedes usar el operador +para agregar números y concatenar cadenas? Este es el reinicio del operador en su forma más pura.

Puede definir objetos que usarán caracteres de operador estándar de Python a su manera. Luego, se pueden usar según el contenido de los objetos con los que está trabajando.

class Thing:
    def __init__(self, value):
        self.__value = value
    def __gt__(self, other):
        return self.__value > other.__value
    def __lt__(self, other):
        return self.__value < other.__value
something = Thing(100)
nothing = Thing(0)
# True
something > nothing
# False
something < nothing
# Error
something + nothing

pprint

La función estándar printen Python sabe lo que hace. Pero intente imprimir un objeto grande y anidado y se sentirá decepcionado.

Aquí es donde entra en juego el módulo de pretty-print de la biblioteca estándar . Muestra objetos de estructura compleja en una forma legible por humanos.

Un verdadero imprescindible para cualquier desarrollador de Python que trabaje con estructuras de datos no triviales.

import requests
import pprint
url = 'https://randomuser.me/api/?results=1'
users = requests.get(url).json()
pprint.pprint(users)

Turno

Python proporciona soporte para multitarea. Esto se hace a través del módulo de biblioteca estándar de Queue.

Este módulo implementa el trabajo con la estructura de datos de "cola". Esta estructura le permite agregar y recuperar registros de acuerdo con una determinada regla.

En una cola Primero en entrar, primero en salir (o FIFO), puede recuperar objetos en el orden en que se agregaron. El método Último en entrar, primero en salir expone primero los objetos agregados recientemente.

Y finalmente, la cola de prioridad le permite recuperar objetos según su orden de clasificación.

Este es un ejemplo del uso de colas para la programación de subprocesos múltiples en Python.

__repr__

Al definir una clase u objeto en Python, es mejor darle la representación de cadena "oficial". Por ejemplo:

>>> file = open('file.txt', 'r')
>>> print(file)
<open file 'file.txt', mode 'r' at 0x10d30aaf0>

Esto simplifica enormemente la depuración del código. Agregue sintaxis a la definición de clase de esta manera:

class someClass:
    def __repr__(self):
        return "<some description here>"
someInstance = someClass()
# prints <some description here>
print(someInstance)

sh

Python es un gran lenguaje de secuencias de comandos. A veces, usar el sistema operativo estándar y las bibliotecas de subprocesos se convierte en un verdadero dolor de cabeza.

la biblioteca sh es una gran alternativa.

Con él, puede llamar a cualquier programa como si fuera una función normal, lo que es extremadamente útil para automatizar el flujo de trabajo y las tareas, todo hecho en Python.

from sh import *
sh.pwd()
sh.mkdir('new_folder')
sh.touch('new_file.txt')
sh.whoami()
sh.echo('This is great!')

Sugerencias de tipo

Python es un lenguaje tipado dinámicamente. No necesita especificar el tipo de datos al definir variables, funciones, clases, etc.

Esta técnica reduce el tiempo de desarrollo. Sin embargo, hay cosas más terribles que un error de tiempo de ejecución causado por un simple problema de entrada.

A partir de Python 3.5 , puede especificar sugerencias de tipo al definir funciones.

def addTwo(x : Int) -> Int:
    return x + 2

Y también establecer alias como:

from typing import List
Vector = List[float]
Matrix = List[Vector]
def addMatrix(a : Matrix, b : Matrix) -> Matrix:
  result = []
  for i,row in enumerate(a):
    result_row =[]
    for j, col in enumerate(row):
      result_row += [a[i][j] + b[i][j]]
    result += [result_row]
  return result
x = [[1.0, 0.0], [0.0, 1.0]]
y = [[2.0, 1.0], [0.0, -2.0]]
z = addMatrix(x, y)

Las anotaciones de tipo (aunque no son obligatorias) pueden hacer que su código sea más fácil de leer.

Además, proporcionan herramientas de verificación de tipos para tener tiempo de "atrapar" los notorios TypeErrors antes de la ejecución. ¡Algo muy útil, especialmente cuando se trabaja en proyectos grandes y complejos!

uuid

Una manera fácil y rápida de generar identificadores únicos universales (o UUID) es usar el módulo uuid de la biblioteca estándar de Python .

import uuid
user_id = uuid.uuid4()
print(user_id)

Este módulo crea un número arbitrario de 128 bits que es casi seguro que es único.

Por cierto, puede generar más de 2¹²² UUID. Eso es más de cinco undecillones (o 5,000,000,000,000,000,000,000,000,000,000,000,000).

La probabilidad de repetir una combinación en este rango es despreciable. Incluso con un billón de UUID, la posibilidad de que se duplique un valor existente es mucho menor que uno en mil millones.

Muy bueno para dos líneas de código.

Entornos virtuales

Esta parte es mi favorita en Python.

Quizás esté trabajando en varios proyectos de Python a la vez. Desafortunadamente, a veces dos proyectos están vinculados a diferentes versiones de la misma dependencia. Entonces, ¿cuál instalar entonces?

Afortunadamente, el soporte de Python para entornos virtuales lo ayuda a obtener todo a la vez. Desde la línea de comando:

python -m venv my-project
source my-project/bin/activate
pip install all-the-modules

Ahora tiene versiones independientes e instaladores de Python ejecutándose en la misma máquina. ¡Problema resuelto!

wikipedia

Wikipedia tiene una excelente interfaz que brinda a los usuarios acceso programable a un tesoro de conocimiento e información completamente gratuitos.

El módulo de wikipedia hace que acceder a esta API sea increíblemente conveniente.

import wikipedia
result = wikipedia.page('freeCodeCamp')
print(result.summary)
for link in result.links:
    print(link)

Al igual que el sitio real, el módulo brinda soporte para multilingüismo, ambigüedad de páginas, selección aleatoria de páginas e incluso el formato donate().

xkcd

El humor es el sello distintivo del lenguaje Python. Después de todo, recibió su nombre del sketch cómico británico Monty Python: The Flying Circus . La mayor parte de la documentación oficial de Python tiene referencias a los bocetos más famosos del programa.

Pero el sentido del humor no se limita solo a la documentación. Intenta ejecutar debajo de la línea:

import antigravity

Nunca cambies, Python. Sigue igual.

YAML

YAML significa YAML, no lenguaje de marcas . Es un lenguaje de formato de datos que es una versión extendida de JSON.

Pero a diferencia de JSON, puede almacenar objetos más complejos y hacer referencia a sus propios elementos. También puede escribir comentarios, lo cual es excelente para crear archivos de configuración.

El módulo PyYAML le permite usar YAML con Python. Instálelo así:

$ pip install pyyaml

Y luego importe en sus proyectos:

import yaml

PyYAML le permite almacenar objetos de Python de todos los tipos de datos e instancias de cualquier clase personalizada.

Código Postal

La última y muy chula sabiduría en tu alcancía. ¿Alguna vez has creado un diccionario a partir de dos listas?

keys = ['a', 'b', 'c']
vals = [1, 2, 3]
zipped = dict(zip(keys, vals))

La función incorporada zip()toma múltiples iterables y devuelve una lista de tuplas. Cada tupla agrupa los elementos de las entidades de entrada por su índice posicional.

Incluso puede "descomprimir" objetos llamando a *zip().

Fuente:

https://elsolitario.org/post/trucos-utiles-de-python/

Report Page