ipython
Raccourcis IPython, trucs et astuces
Recherche…
Remarques
IPython (et le bloc-notes Jupyter) définit une signification particulière pour le caractère de soulignement. Il contient toujours la sortie la plus récente. Cela s'avère utile lors du traitement de données en plusieurs étapes. Ceci est démontré dans l'exemple ci-dessus. Pour nettoyer le texte, il est exécuté à travers quelques expressions régulières, puis normalisé avant d'être divisé. En dehors d'IPython, chaque résultat devrait être stocké dans une nouvelle variable ou les étapes imbriquées. Dans IPython, nous explorons et conservons souvent des variables ou reproduisons une longue série d'appels imbriqués. Donc, c'est là que le trait de soulignement apparaît.
Il y en a un. Si vous attribuez une valeur au trait de soulignement dans la portée globale, cela entraîne un comportement inattendu. Par exemple:
address = ('http://example.com', 80)
(_, port) = address
Ici, je ne suis intéressé que par le deuxième élément du tuple, le numéro de port. Je suis donc la convention et attribue le premier élément au trait de soulignement pour indiquer qu'il s'agit d'un jetable. Cependant, la valeur du trait de soulignement est maintenant http://example.com
. Et si je devais exécuter plus de code:
1+4
La valeur attendue du trait de soulignement serait 5. Cependant, ce n'est pas le cas. La valeur est toujours le domaine du tuple. Lorsque vous affectez au trait de soulignement dans la portée globale, non seulement il clobe la valeur, mais il arrête également de stocker la sortie la plus récente. Ce n'est pas le cas si vous affectez le trait de soulignement à l'intérieur d'une fonction ou d'une boucle.
L'utilisation spéciale du trait de soulignement dans 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()