Sök…


Anmärkningar

IPython (och Jupyter Notebook) definierar en speciell betydelse för understrecket. Den innehåller alltid den senaste utgången. Detta är användbart när du bearbetar data i flera steg. Detta visas i exemplet ovan. För att rensa upp texten körs den genom några vanliga uttryck och normaliseras sedan innan den delas upp. Utanför IPython, måste varje resultat lagras i en ny variabel eller stegen kapslade. I IPython, ofta undersöker vi och håller reda på variabler eller återger en lång serie kapslade samtal är tråkigt. Så det är där understrecket visas.

Det finns en gotcha. Om du tilldelar ett värde till understrecket i det globala omfånget orsakar det oväntat beteende. Till exempel:

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

Här är jag bara intresserad av det andra elementet i tupeln, portnumret. Så jag följer konventionen och tilldelar det första elementet till understrecket för att indikera att det är ett kast. Men nu är understreckets värde http://example.com . Och om jag skulle köra mer kod:

1+4

Det förväntade värdet på understrecket skulle vara 5. Det är dock inte det. Värdet är fortfarande domänen från tupeln. När du tilldelar understruket i det globala omfånget, cloberar det inte bara värdet, utan det slutar också lagra den senaste utgången. Detta är inte fallet om du tilldelar understrecket i en funktion eller slinga.

Den speciella användningen av understreck i 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow