associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "AjudaInterpretador"

Diferenças entre as versões de 2 e 4 (2 versões de distância)
Revisão 2e 2004-07-23 20:52:35
Tamanho: 1596
Editor: RudaMoura
Comentário:
Revisão 4e 2004-07-23 21:31:51
Tamanho: 4388
Editor: RudaMoura
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
Usar o interpretador Python para xeretar a linguagem é algo bem legal, mas também
é possível fazer o mesmo com um módulo que não estamos habituado a usar.
Vou deixar algumas dicas de que eu faço quando estou bisbilhotando algum módulo
novo.
Vou deixar algumas dicas do que eu faço quando estou bisbilhotando algum módulo
que não conheço.
Linha 18: Linha 16:
O dir lista os símbolos públicos de um módulo.
Contém classes, funções, variáveis, etc.
O dir lista os símbolos públicos de um módulo, geralmente
contém classes, funções e variáveis para serem usadas pelo programador.
Linha 22: Linha 20:
>>> import shutil
>>> dir(shutil)
['Error', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '_build_cmdtuple', 'copy', 'copy2', 'copyfile', 'copyfileobj', 'copymode', 'copystat', 'copytree', 'exceptions', 'move', 'os', 'rmtree', 'stat', 'sys']
>>> import thread
>>> dir(thread)
['LockType', '__doc__', '__name__', 'allocate', 'allocate_lock', 'error', 'exit', 'exit_thread', 'get_ident', 'interrupt_main', 'start_new', 'start_new_thread']>>>
Linha 27: Linha 25:
Tirando os símbolos "privados" (os __mbolos__), é o que eu tenho disponível para mexer com o módulo shutil. Tirando os símbolos que o Python criou (__doc__ e __name__), esta é lista do que
eu tenho disponível para mexer com o módulo ''thread''.
Linha 31: Linha 30:
Todo software bem escrito em Python deve ser ter documentação decente. Pra que serve mesmo o módulo shutil?
Para que serve o módulo thread?
Linha 34: Linha 32:
>>> print shutil.__doc__
Utility functions for copying files and directory trees.
 
XXX The functions here don't copy the resource fork or other metadata on Mac.
>>> print thread.__doc__
This module provides primitive operations to write multi-threaded programs.
The 'threading' module provides a more convenient interface.
Linha 40: Linha 37:
Ok, funções para manipular arquivos (copiar). Tem um comentário em especial para
usuários de Mac, bom, não sou mais usuário de Mac :)
Ok, é pra fazer manipular threads, de uma maneira "primitiva" (baixo-nível).
Tem uma dica pra eu usar o módulo ''threading'' que é mais amigável.
Linha 43: Linha 40:
O que o símbolo ''move'' dentro desse módulo?
O que é o símbolo ''start_new'' nesse módulo?
Linha 46: Linha 42:
>>> print shutil.move
<function move at 0xf7012b8c>
>>> print thread.start_new
<built-in function start_new>
Linha 50: Linha 46:
Hum, função, que faz o que? como usa? Uma função, e o que ela faz mesmo?
{{{#!python
>>> print thread.start_new.__doc__
start_new_thread(function, args[, kwargs])
(start_new() is an obsolete synonym)
 
Start a new thread and return its identifier. The thread will call the
function with positional arguments from the tuple args and keyword arguments
taken from the optional dictionary kwargs. The thread exits when the
function returns; the return value is ignored. The thread will also exit
when the function raises an unhandled exception; a stack trace will be
printed unless the exception is SystemExit.
}}}
Linha 52: Linha 60:
{{{#!python Hmm legal, eu sei os argumentos que a função utiliza e tenho a descrição
completa dela, tem até uma dica que essa função é obsoleta! Eu deveria
usar ''start_new_thread'' ao invés.
Linha 54: Linha 64:
= O help é seu amigo =

Existe uma forma mais amigável de obter ajuda no interpretador (só disponível
nas versões 2 do Python), é utilizando o comando ''help''. O {{{help(coisa)}}}
exibe a saída igual a uma manpage do Unix de ''coisa'',
contendo um resumo, descrição, parâmetros, hierarquia de classes, variáveis
e outros componentes. Muito informativo e útil.

Então, de volta ao módulo thread...
{{{
>>> help(thread)

Help on built-in module thread:
 
NAME
    thread
 
FILE
    (built-in)
 
DESCRIPTION
    This module provides primitive operations to write multi-threaded programs.
    The 'threading' module provides a more convenient interface.
 
CLASSES
    exceptions.Exception
        error
    __builtin__.object
        lock
...
Linha 55: Linha 95:

No caso de eu usar o comando {{{help(thread.start_new_thread}}}
eu vou obter o mesmo que o comando {{{print thread.start_new_thread.__doc__}}}.

= O pydoc é seu amigo =

O pydoc é o help disponível no prompt do sistema! Ok, infelizmente
as distribuiçoes Linux não costumam por este utilitário no "bin" do sistema,
mas é fácil resolver isso:
{{{
# ln -sf /usr/lib/python2.3/pydoc.py /usr/local/bin/pydoc
}}}

Não esqueça de trocar o ''python2.3'' com a versão do seu Python.
Agora é fácil obter ajuda de qualquer módulo em Python.
É só chamar {{{pydoc thread}}} ou então {{{pydoc thread.start_new_thread}}}.

Com o pydoc é possível também procurar por uma palavra-chave em toda
a documentação dos módulos, digamos que eu queria procurar por ''shell', eu faço:

{{{
$ pydoc -k shell
commands - Execute shell commands via os.popen() and return status, output.
fnmatch - Filename matching with shell patterns.
idlelib.PyShell
idlelib.ScriptBinding - Extension to execute code outside the Python shell window.
shlex - A lexical analyzer class for simple shell-like syntaxes.
}}}

Uma listagem completa de módulos que fazem referência ao termo shell.

O pydoc é capaz de fazer mais coisas ainda! Não troque de canal, não saia da sua
cadeira. Se você usar
{{{
$ pydoc -p 8000
}}}

e abrir o seu browser favorito na página {{{localhost:8000}}}, sim,
toda a documentação dos módulos Python, de forma organizada e clicável!

= Outros amigos =
  * http://docs.python.org/lib/lib.html
  * TabCompleta

Vou deixar algumas dicas do que eu faço quando estou bisbilhotando algum módulo que não conheço.

O print é seu amigo

Use e abuse, se não sabe o que é coisa então print coisa.

   1 >>> x = dir
   2 >>> print x
   3 <built-in function dir>

x é um alias para a função dir.

O dir é seu amigo

O dir lista os símbolos públicos de um módulo, geralmente contém classes, funções e variáveis para serem usadas pelo programador.

   1 >>> import thread
   2 >>> dir(thread)
   3 ['LockType', '__doc__', '__name__', 'allocate', 'allocate_lock', 'error', 'exit', 'exit_thread', 'get_ident', 'interrupt_main', 'start_new', 'start_new_thread']>>>

Tirando os símbolos que o Python criou (doc e name), esta é lista do que eu tenho disponível para mexer com o módulo thread.

coisa.__doc__ é seu amigo

Para que serve o módulo thread?

   1 >>> print thread.__doc__
   2 This module provides primitive operations to write multi-threaded programs.
   3 The 'threading' module provides a more convenient interface.

Ok, é pra fazer manipular threads, de uma maneira "primitiva" (baixo-nível). Tem uma dica pra eu usar o módulo threading que é mais amigável.

O que é o símbolo start_new nesse módulo?

   1 >>> print thread.start_new
   2 <built-in function start_new>

Uma função, e o que ela faz mesmo?

   1 >>> print thread.start_new.__doc__
   2 start_new_thread(function, args[, kwargs])
   3 (start_new() is an obsolete synonym)
   4  
   5 Start a new thread and return its identifier.  The thread will call the
   6 function with positional arguments from the tuple args and keyword arguments
   7 taken from the optional dictionary kwargs.  The thread exits when the
   8 function returns; the return value is ignored.  The thread will also exit
   9 when the function raises an unhandled exception; a stack trace will be
  10 printed unless the exception is SystemExit.

Hmm legal, eu sei os argumentos que a função utiliza e tenho a descrição completa dela, tem até uma dica que essa função é obsoleta! Eu deveria usar start_new_thread ao invés.

O help é seu amigo

Existe uma forma mais amigável de obter ajuda no interpretador (só disponível nas versões 2 do Python), é utilizando o comando help. O help(coisa) exibe a saída igual a uma manpage do Unix de coisa, contendo um resumo, descrição, parâmetros, hierarquia de classes, variáveis e outros componentes. Muito informativo e útil.

Então, de volta ao módulo thread...

>>> help(thread)

Help on built-in module thread:
 
NAME
    thread
 
FILE
    (built-in)
 
DESCRIPTION
    This module provides primitive operations to write multi-threaded programs.
    The 'threading' module provides a more convenient interface.
 
CLASSES
    exceptions.Exception
        error
    __builtin__.object
        lock
...

No caso de eu usar o comando help(thread.start_new_thread eu vou obter o mesmo que o comando print thread.start_new_thread.__doc__.

O pydoc é seu amigo

O pydoc é o help disponível no prompt do sistema! Ok, infelizmente as distribuiçoes Linux não costumam por este utilitário no "bin" do sistema, mas é fácil resolver isso:

# ln -sf /usr/lib/python2.3/pydoc.py /usr/local/bin/pydoc

Não esqueça de trocar o python2.3 com a versão do seu Python. Agora é fácil obter ajuda de qualquer módulo em Python. É só chamar pydoc thread ou então pydoc thread.start_new_thread.

Com o pydoc é possível também procurar por uma palavra-chave em toda a documentação dos módulos, digamos que eu queria procurar por shell', eu faço:

$ pydoc -k shell
commands - Execute shell commands via os.popen() and return status, output.
fnmatch - Filename matching with shell patterns.
idlelib.PyShell
idlelib.ScriptBinding - Extension to execute code outside the Python shell window.
shlex - A lexical analyzer class for simple shell-like syntaxes.

Uma listagem completa de módulos que fazem referência ao termo shell.

O pydoc é capaz de fazer mais coisas ainda! Não troque de canal, não saia da sua cadeira. Se você usar

$ pydoc -p 8000

e abrir o seu browser favorito na página localhost:8000, sim, toda a documentação dos módulos Python, de forma organizada e clicável!

Outros amigos