ipython
Atajos, consejos y trucos de IPython
Buscar..
Observaciones
IPython (y el cuaderno Jupyter) definen un significado especial para el guión bajo. Siempre contiene la salida más reciente. Esto es útil cuando se procesan datos en varios pasos. Esto se demuestra en el ejemplo anterior. Para limpiar el texto, se ejecuta a través de algunas expresiones regulares y luego se normaliza antes de dividirse. Fuera de IPython, cada resultado debería almacenarse en una nueva variable o los pasos anidados. En IPython, a menudo estamos explorando y haciendo un seguimiento de las variables o reproduciendo una larga serie de llamadas anidadas es tedioso. Así que aquí es donde aparece el guión bajo.
Hay una gotcha. Si asigna un valor al guión bajo en el ámbito global, se produce un comportamiento inesperado. Por ejemplo:
address = ('http://example.com', 80)
(_, port) = address
Aquí solo me interesa el segundo elemento de la tupla, el número de puerto. Así que sigo la convención y asigno el primer elemento al guión bajo para indicar que es un tiro. Sin embargo, ahora el valor del guión bajo es http://example.com
. Y si tuviera que ejecutar más código:
1+4
El valor esperado del guión bajo sería 5. Sin embargo, no lo es. El valor sigue siendo el dominio de la tupla. Cuando asigna el guión bajo en el ámbito global, no solo obstruye el valor, sino que también detiene el almacenamiento de la salida más reciente. Este no es el caso si asigna el guión bajo dentro de una función o bucle.
El uso especial del guión bajo en IPython.
from urllib.request import urlopen
from collections import Counter
import re
conn = urlopen('http://textfiles.com/100/dodontae.hum')
lines = conn.readlines()
conn.close()
# readlines() returns byte strings
data = ''.join([line.decode('utf-8') for line in lines])
# replace non-letters with a space
re.sub('[^A-Za-z]', ' ', data)
# condense successive whitespace into a single space
# the underscore retrieves the most recent output
re.sub('\s+', ' ', _)
# normalize the text by lowercasing and removing leading and trailing whitespace
_.lower().strip()
# split into words on space
words = _.split(' ')
from collections import Counter
word_count = Counter()
for word in words:
word_count[word[0]] += 1
word_count.most_common()