O IPython é o meu shell Python favorito. É cheio de recursos que facilitam o dia-a-dia de quem passa parte de sua vida imerso em um shell Python. Neste post, vou listar alguns recursos que me ajudam bastante diariamente.
Recuperando o resultado da última operação
É coisa bem comum estar em uma sessão no shell Python, testar uma determinada operação e logo depois perceber que queria atribuir o resultado daquela operação para alguma variável. No IPython é barbada, com o _:
In [5]: 10 * 2 + 4 * 4 Out[5]: 36 In [6]: print _ 36 In [7]: x = _ In [8]: print x 36
Ou seja, o resultado da execução do último comando é sempre referenciado pelo _ (underscore). Além disso, dois underscores referem-se sempre ao resultado obtido pela execução do penúltimo comando e três underscores ao resultado do antepenúltimo comando. Assim:
- _: resultado do último comando.
- __: resultado do penúltimo comando.
- ___: resultado do antepenúltimo comando.
Isso é particularmente útl quando estamos imersos em uma sessão de descoberta usando o IPython. Torna o processo muito mais ágil. Veja:
In [18]: 1 Out[18]: 1 In [19]: 2 Out[19]: 2 In [20]: 3 Out[20]: 3 In [21]: _ + __ + ___ Out[21]: 6
Além disso, podemos nos referir à execuções específicas, usando a numeração que o IPython usa para diferenciar um par entrada-saída de outro. A sintaxe é bem simples: _ix, onde x é o número da entrada correspondente. Veja:
In [18]: 1 Out[18]: 1 In [19]: 2 Out[19]: 2 In [20]: 3 Out[20]: 3 In [21]: _ + __ + ___ Out[21]: 6 In [22]: print _i19 + 20 Out[22]: 22
Cool, huh?
Chamando o help de um objeto
Já falei sobre isso em um post anterior, mas veja de novo o uso do ponto de interrogação (?) para ver a documentação relacionada a determinado objeto:
In [31]: import math In [32]: math.sqrt? Type: builtin_function_or_method String Form:<built-in function sqrt> Docstring: sqrt(x) Return the square root of x.
Isso por si só já me faz usar o IPython ao invés do shell padrão.
As funções mágicas
O IPython é repleto de funções mágicas (magic functions) que fornecem enormes facilidades pro usuário. Elas são precedidas pelo caractere %. Vamos ver alguns exemplos.
Em um post anterior, falei sobre o módulo timeit que é usado para medir tempo de execução de programas Python. Existe uma função mágica pra quebrar esse galho pra gente. Por exemplo, se eu estiver na dúvida sobre qual trecho de código executaria de forma mais rápida, poderia fazer o seguinte:
In [35]: %%timeit sum = 0 ...: for i in range(0, 10000): ...: sum += i ...: 1000 loops, best of 3: 324 us per loop In [36]: %%timeit sum = 0 ...: for i in xrange(0, 10000): ...: sum += i ...: 1000 loops, best of 3: 268 us per loop
Se o código a ser testado for de uma linha só, podemos usar %timeit (modo linha) ao invés de %%timeit (modo célula).
Outra função interessante é relacionada ao logging da sessão atual. %logstart faz com que a sessão atual passe a ser gravada em um arquivo .py com os comandos digitados dentro dele. %logon e %logoff servem para pausar e recomeçar o logging em uma sessão.
Executando comandos no sistema
Dentro de uma sessão IPython, podemos invocar comandos no sistema operacional usando o caractere !:
In[1]: !ls bin Desktop music pictures src videos
In[2]: !ps PID TTY TIME CMD 25277 pts/0 00:00:00 bash 25446 pts/0 00:00:00 ipython 25458 pts/0 00:00:00 sh 25459 pts/0 00:00:00 ps
Assim fica fácil interagir com o SO quando necessário for.
É isso. Se você tiver alguma outra dica interessante sobre o IPython, poste nos comentários.

Você precisa fazer login para comentar.