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()


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow