Enumeración
Antes hacíamos esto:
i = 0
for item in iterable:
print i, item
i += 1
Ahora hacemos esto:
for i, item in enumerate(iterable):
print i, item
La función enumerate también puede recibir un segundo parámetro. Como se muestra a continuación:
>>> list(enumerate('abc'))
[(0, 'a'), (1, 'b'), (2, 'c')]
>>> list(enumerate('abc', 1))
[(1, 'a'), (2, 'b'), (3, 'c')]
Comprensión de diccionarios/conjuntos
Quizás sepas cómo hacer comprensión de listas, pero tal vez no conozcas la comprensión de diccionarios/conjuntos. Son simples, fáciles de usar y eficientes. Como en este ejemplo:
my_dict = {i: i * i for i in xrange(100)}
my_set = {i * 15 for i in xrange(100)}
# There is only a difference of ':' in both
# 两者的区别在于字典推导中有冒号
Forzar la división de punto flotante
Si dividimos por un entero, incluso si el resultado es un número de punto flotante, Python 2 (nota del editor: aquí agregué el número de versión) todavía nos daría un entero. Para evitar este problema, necesitamos hacer esto:
result = 1.0/2
Pero ahora hay otro método para resolver este problema, incluso antes no me había dado cuenta de que existía. Puedes hacer lo siguiente:
from __future__ import division result = 1/2 # print(result) # 0.5
Mira, ahora no necesitas agregar '.0' a los números para obtener la respuesta exacta. Ten en cuenta que este truco solo aplica a Python 2. En Python 3 no necesitas hacer la importación porque ya está importado por defecto.
Servidor simple
¿Quieres compartir de forma rápida y conveniente los archivos de un directorio? Puedes hacerlo así:
# Python2 python -m SimpleHTTPServer # Python 3 python3 -m http.server
Esto iniciará un servidor para ti.
Evaluación de expresiones de Python
Todos conocemos la función eval, pero ¿sabemos acerca de literal_eval? Probablemente muchos no. Puedes usar esta operación:
import ast my_list = ast.literal_eval(expr)
en lugar de hacer lo siguiente:
expr = "[1, 2, 3]" my_list = eval(expr)
Creo que la mayoría ve esta sintaxis por primera vez, pero en realidad esto ha existido en Python durante mucho tiempo.
Análisis de scripts
Puedes analizar fácilmente un script ejecutando el siguiente código:
python -m cProfile my_script.py
Introspección de objetos
En Python puedes inspeccionar objetos con la función dir(). Como en el siguiente ejemplo:
>>> foo = [1, 2, 3, 4] >>> dir(foo) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', ... , 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Depuración de scripts
Puedes establecer puntos de interrupción en tus scripts fácilmente con el módulo pdb. Como en el siguiente ejemplo:
import pdb pdb.set_trace()
Puedes agregar pdb.set_trace() en cualquier parte del script; esta función establecerá un punto de interrupción en esa posición.
Simplificación de la estructura if
Si necesitas comprobar varios valores, puedes usar el siguiente método:
if n in [1,4,5,6]:
en lugar de la siguiente forma:
if n==1 or n==4 or n==5 or n==6:
Inversión de cadenas/secuencias
Puedes invertir rápidamente una secuencia con el siguiente método:
>>> a = [1,2,3,4] >>> a[::-1] [4, 3, 2, 1] # This creates a new reversed list. # If you want to reverse a list in place you can do: a.reverse()
Este método también aplica para invertir cadenas:
>>> foo = "yasoob" >>> foo[::-1] 'boosay'
Impresión elegante
Puedes imprimir de forma elegante diccionarios y secuencias de la siguiente manera:
from pprint import pprint pprint(my_dict)
Este método es más eficiente para imprimir diccionarios. Además, si quieres imprimir de forma elegante un documento JSON desde un archivo, puedes usar esta otra forma:
cat file.json | python -m json.tool
Operador ternario
El operador ternario es un atajo para la sentencia if-else, también conocido como operador condicional. Aquí tienes algunos ejemplos de referencia; pueden hacer tu código más compacto y elegante.
[on_true] if [expression] else [on_false] x, y = 50, 25 small = x if x < y else y