ipython
Scorciatoie, suggerimenti e trucchi IPython
Ricerca…
Osservazioni
IPython (e il Notebook Jupyter) definisce un significato speciale per il trattino basso. Contiene sempre l'output più recente. Questo è utile quando si elaborano i dati in più passaggi. Questo è dimostrato nell'esempio sopra. Per ripulire il testo, viene eseguito attraverso alcune espressioni regolari e quindi normalizzato prima di essere suddiviso. Al di fuori di IPython, ogni risultato dovrebbe essere memorizzato in una nuova variabile o i passaggi annidati. In IPython, spesso stiamo esplorando e tenendo traccia delle variabili o riproducendo una lunga serie di chiamate nidificate è noioso. Quindi questo è dove appare il trattino basso.
C'è un trucco. Se assegni un valore al carattere di sottolineatura nello scope globale, provoca un comportamento imprevisto. Per esempio:
address = ('http://example.com', 80)
(_, port) = address
Qui mi interessa solo il secondo elemento della tupla, il numero di porta. Quindi seguo le convenzioni e assegno il primo elemento al trattino basso per indicare che è un throwaway. Tuttavia, ora il valore del trattino basso è http://example.com
. E se dovessi eseguire più codice:
1+4
Il valore atteso del carattere di sottolineatura sarebbe 5. Tuttavia, non lo è. Il valore è ancora il dominio della tupla. Quando si assegna alla sottolineatura nell'ambito globale, non solo clobbers il valore, ma interrompe anche la memorizzazione dell'output più recente. Questo non è il caso se si assegna il carattere di sottolineatura all'interno di una funzione o ciclo.
L'uso speciale del trattino basso in 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()