docstrings

Docstrings são strings que inserimos dentro de nosso código Python com o intuito de fornecer uma explicação sobre o funcionamento deste. Essa string deve ser colocada como a primeira linha da definição de uma classe, método ou função.

O texto representado por tal string será apresentado quando for executado o comando help() utilizando como entrada a função onde a docstring está inserida. Considere o exemplo da função dobro:

def dobro(x):
    """Esta função retorna o dobro do número x"""
    return x*2

Quando executarmos o comando help sobre a função acima, receberemos o conteúdo da string colocada como a primeira linha:

>>> help(dobro)
Help on function dobro in module __main__:

dobro(x)
    Esta função retorna o dobro do número x

A string inserida como docstring também pode ser acessada através do atributo __doc__ daquela função:

>>> print dobro.__doc__
Esta função retorna o dobro do número x

Isso vale também para classes e métodos:

 class Data:
     """Classe utilizada para a representação de datas.
     As datas são representadas no formato dia, mês e ano.
     """
     ...
     def passaDia(self):
         """Acrescenta um dia na data."""
         ...

Ao invocarmos o comando help sobre a classe Data, obteremos o seguinte resultado:

>>> help(Data)
Help on class Data in module __main__:

class Data
 |  Classe utilizada para a representação de datas.
 |  As datas são representadas no formato dia, mês e ano.
 | 
 |  Methods defined here:
 | 
 |  passaDia(self)
 |      Acrescenta um dia na data.

Dúvidas sobre o que e como colocar em uma docstring? Consulte a PEP 257 (PEP é a sigla referente a: Python Enhancement Proposals).

Comandos de ajuda no shell Python

Quando não temos disponível a completação por tab no shell Python, podemos utilizar como alternativa o dir, um comando builtin do Python. Quando invocamos o comando dir, passando como argumento a tal comando um objeto, este irá retornar uma lista de strings contendo os nomes das funções e dos atributos disponíveis para tal tipo de objeto. Por exemplo, a Figura 1 mostra o resultado da execução da função dir sobre uma variável do tipo string, o que resulta em uma lista com todos os atributos/funções que variáveis de tal tipo possuem.

Comando dir do Python

Figura 1. O comando dir sobre um objeto string

Beleza, mas e o que fazer com esse monte de nomes se não sabemos exatamente o que as funções disponíveis fazem ou como elas funcionam? Para descobrir, basta usar o comando help, passando como argumento o nome da função da qual se deseja descobrir o funcionamento. No exemplo da Figura 2, foi digitado o comando:

>>> help(string.split)
Ajuda do comando split

Figura 2. A ajuda sobre o comando split

Para fechar o texto de ajuda, basta pressionar a tecla q (de quit), que o controle volta ao shell Python. Em um próximo post, veremos como adicionar documentação às nossas próprias funções.

Histórico de comandos no shell Python

Dando sequência ao post anterior, vamos a algumas modificações no arquivo de configurações .pythonrc para que possamos habilitar, além da completação por tab, também a gravação e recuperação do histórico de comandos digitados em sessões anteriores. Tal recurso permite que, ao abrirmos uma nova sessão de um shell Python, possamos recuperar a lista de comandos executados nas sessões anteriores, através da tecla up arrow (seta para cima).

import os
import atexit
import readline
import rlcompleter
history = os.path.expanduser('~/.python_history')
readline.read_history_file(history)
readline.parse_and_bind('tab: complete')
atexit.register(readline.write_history_file, history)

Modifique seu arquivo .pythonrc para que fique como o trecho de código acima¹. As linhas em vermelho são as linhas que foram inseridas no arquivo de configuração apresentado no post anterior. Dessa forma, seu histórico de comandos digitados no shell python será gravado no arquivo /home/nome_usuário/.python_history, sempre que você sair do shell Python.

Nota: Só pra lembrar que nesse ponto você deve ter configurado a variável de ambiente PYTHONSTARTUP para carregar o arquivo de configuração, adicionando no seu ~/.bashrc a linha:
export PYTHONSTARTUP=~/.pythonrc

Até aí, tudo OK. Mas e como isso funciona? O que significam as linhas de código que você vai inserir em seu arquivo de configurações do Python? Abaixo segue uma lista, linha por linha, explicando brevemente o que o código acima faz:

  1. Importa o módulo os
  2. Importa o módulo atexit
  3. Importa o módulo readline
  4. Importa o módulo rlcompleter
  5. Expande o nome de arquivo de ‘~/.python_history’ para ‘/home/nome_usuário/.python_history’ e grava isso na variável history
  6. Lê o arquivo de histórico cujo nome foi obtido na linha anterior
  7. Faz a ligação da tecla TAB com a função de completação
  8. Registra a função de gravação do arquivo de histórico para que seja executada sempre que o shell python for finalizado

Pronto, é isso. Agora faça o teste, abra um shell python, digite alguns comandos e feche. Abra novamente o shell python e pressione a tecla seta para cima e verifique se os comandos foram armazenados no histórico. Edit: caso o arquivo ~/.python_history não exista, ocorrerá um erro ao abrir o shell Python. Isso pode ser solucionado criando o arquivo vazio antes (touch ~/.python_history).

¹ Baseado no arquivo de configurações apresentado em: http://valueerror.wordpress.com/2009/11/03/python-shell-history-autocompletion-and-rc-file/

Completação por tab no shell interativo

Algo muito útil para quando estamos testando e estudando código Python, é termos um shell interativo que nos forneça completação de nomes de funções/atributos dos módulos/tipos disponíveis em Python. Qual a utilidade disso?

  1. Possibilita que lembremos daquela funçãozinha cujo nome esquecemos por falta de prática
  2. Auxilia no estudo, pois é possível conhecermos novas funções existentes nos módulos fornecidos juntamente com o Python, que muitas vezes facilitam várias tarefas em nossos programas

Bom, vamos ao que interessa. Abra em seu editor de textos o arquivo /home/nome_usuário/.pythonrc e cole o seguinte conteúdo dentro deste arquivo. Caso o arquivo não exista, não hesite em criá-lo!

import readline, rlcompleter
readline.parse_and_bind('tab: complete')
del readline, rlcompleter

Por fim, é necessário que você configure sua variável de ambiente PYTHONSTARTUP para possuir como valor o caminho do arquivo .pythonrc. Para isso, coloque em seu arquivo .bashrc o seguinte comando:

export PYTHONSTARTUP=~/.pythonrc

Após isso, abra um shell interativo python e faça um teste (<TAB> significa que você deve pressionar a tecla tab do seu teclado):

import string
string.<TAB><TAB>

Pronto, o shell Python deverá lhe mostrar várias opções de funções disponíveis no módulo string. A Figura 1 apresenta o shell python oferecendo opções de completação para o módulo atexit.

Completação no Shell Python

Figura 1. Completação no Shell Python