Suche…


Bemerkungen

IPython (und das Jupyter Notebook) definieren eine spezielle Bedeutung für den Unterstrich. Es enthält immer die aktuellste Ausgabe. Dies ist nützlich, wenn Daten in mehreren Schritten verarbeitet werden. Dies wird im obigen Beispiel gezeigt. Um den Text zu bereinigen, wird er einige reguläre Ausdrücke durchlaufen und dann normalisiert, bevor er aufgeteilt wird. Außerhalb von IPython müsste jedes Ergebnis in einer neuen Variablen oder den verschachtelten Schritten gespeichert werden. In IPython untersuchen und verfolgen wir häufig Variablen und reproduzieren eine lange Reihe verschachtelter Anrufe. Hier erscheint also der Unterstrich.

Es gibt eine gotcha. Wenn Sie dem Unterstrich im globalen Bereich einen Wert zuweisen, führt dies zu unerwartetem Verhalten. Zum Beispiel:

address = ('http://example.com', 80)
(_, port) = address

Hier interessiert mich nur das zweite Element im Tupel, die Portnummer. Ich folge der Konvention und weise das erste Element dem Unterstrich zu, um anzuzeigen, dass es ein Wegwerf ist. Jetzt ist der Wert des Unterstrichs jedoch http://example.com . Und wenn ich mehr Code ausführen würde:

1+4

Der erwartete Wert des Unterstrichs wäre 5. Dies ist jedoch nicht der Fall. Der Wert ist immer noch die Domäne aus dem Tupel. Wenn Sie den Unterstrich im globalen Gültigkeitsbereich zuweisen, wird der Wert nicht nur blockiert, sondern auch das Speichern der neuesten Ausgabe beendet. Dies ist nicht der Fall, wenn Sie den Unterstrich innerhalb einer Funktion oder Schleife zuweisen.

Die spezielle Verwendung des Unterstrichs 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow