Módulos em Python – Curso de programação em Python Lição 12

Bem vindos á décima segunda aula do curso de programação em Python\r\n\r\nEste artigo faz parte do curso de programação em Python do INFOmoz. Para acessar outras aulas do curso, por favor visite o índice do curso de Programação em Python.\r\n

OBJECTIVOS DA AULA

\r\n

\r\n
\r\n\r\n
    \r\n

  • Conceito de módulos
  • \r\n

  • Criação de módulos e conceito de path
  • \r\n

  • Formas de importação de módulos
  • \r\n

  • Módulos nativos de Python-O módulo math e sys
  • \r\n

\r\nVamos entrar agora para o estudo de uma das ferramentas que torna o Python a preciosidade que é! você vai descobrir isso ao longo desta aula.\r\nNas aulas passadas vimos como reutilizar instruções num dado programa, sem ter que reescrever o código, poupando assim tempo e espaço( que quando faltam é uma confusão!!). Imagine agora que pretendemos usar uma mesma função em vários programas sem ter de reescrever o código em cada um dos programas! como Python é uma linguagem muito bem elaborada, tem de haver uma boa forma simples de fazer isso! Você está muito certo, existe sim, é só recorrermos ao uso de módulos, que podem ser definidos como “pacotes” de funções. As funções dum módulo podem ser invocados em qualquer outro programa. Mas, como se faz isso?\r\n

Criando um módulo

\r\nCriar um módulo em Python é tão simples quanto escrever um programa: Abra um editor escreva as funções como se fosse um programa normal e grave com a extensão .py. A diferença é que você deve gravar este programa numa pasta( ou diretório como preferir) que esteja no path. Path, de uma forma simples, pode ser definida como o lugar onde o Python procura os módulos quando são invocados num programa.\r\n\r\nMas ai vem outro problema: Como saber quais as pastas que estão no path?\r\n\r\nComo Python é uma linguagem bem elaborada( é a n-ésima vez que repito isso, mas fazer o quê?), ela possui um script que faz isso por você. Aqui vai ele(Não se preocupe em entende-lo, farás isso ainda nesta aula!):\r\n\r\n\r\n

\r\nimport sys\r\nfor i in sys.path:\r\n    print i\r\n

\r\nRode este script, podes escrever no shell mesmo, que ele vai te mostrar quais as pastas que estão no path. Agora só lhe resta escolher uma delas e gravar o seu módulo(o programa que criaste) ali mesmo. Só uma dica: Não grave todos módulos no mesmo diretório para não sobrecarregar o diretório.\r\n\r\nVamos criar agora o nosso módulo, que será um conjunto de funções de manipulação de dois números(soma,diferença,produto,quociente,potência). Gravaremos no diretório principal do Python(C:\python26, se estiver no path), com o nome numeros.py. Aqui vai ele:\r\n\r\n

\r\n#Modulo numeros.py\r\n#Faz a manipulacao de dois numeros, atraves das funcoes\r\n#soma,diferenca,produto,quociente e potencia\r\n#Curso de programacao em Python do INFOmoz\r\n#Elisio Leonardo 14/01/2009\r\ndef soma(x,y):\r\n"""Esta funcao retorna a soma dos dois numeros passados como    parametros"""\r\n    return x+y\r\ndef diferenca(x,y):\r\n"""Esta funcao retorna a diferenca dos dois numeros passados como parametros"""\r\n    return x-y\r\ndef produto(x,y):\r\n"""Esta funcao retrna o produto dos dois numeros passados"""\r\n    return x*y\r\ndef quociente(x,y):\r\n"""Retorna o quociente dos dois numeros.""""\r\n    return x/y\r\ndef potencia(x,y):\r\n"""Retorna a potencia dos dois numeros"""\r\n    potencia=1\r\n    while y>0:\r\n        potencia=potencia*x\r\n        y=y-1\r\n    return potencia\r\n

\r\nNão precisa executar este programa(também não faz nada mesmo!), pode até fechar esta janela se quiser. Agora abra uma nova janela ou use aquela do shell se quiser, para testar as funções do nosso módulo. experimente fazer soma(2,3), para ver o que acontece:\r\n\r\n

\r\n>>>soma(2,3)\r\nTraceback (most recent call last):\r\n File “”, line 1, in\r\n soma(2,3)\r\n NameError: name ’soma’ is not defined\r\n

\r\n\r\nMas então não criamos um modulo???\r\n\r\nCriamos sim! mas esta função ainda não está definida dentro do programa. Para fazer isso veja o que se segue.\r\n

Forma de importação de módulos

\r\nPara podermos usar funções contidas num módulo, primeiro precisamos importar o módulo para “dentro” do nosso programa. Fazemos isso usando o comando import como segue(lembre-se que só dará certo se o nosso módulo estiver num diretório contido no path):\r\n

\r\nimport numeros\r\n

\r\nNote que não precisamos escrever a extenção .py no nome do módulo. Agora que já temos o módulo importado para o nosso programa, a sintaxe para usar as suas funções é a seguinte:\r\n

\r\nnomedomodulo.nomedafuncao()\r\n

\r\nPara o nosso caso já podemos usar as funções do módulo numeros para manipular números do nosso programa, exemplos:\r\n

\r\nnumeros.soma(2,3)\r\nnumeros.produto(5,6)\r\nnumeros.nada()\r\n#etc.\r\n#Mas se fizermos:\r\nnumeros.outro()\r\nTraceback (most recent call last):\r\nFile “”, line 1, in\r\nnumeros.outro()\r\nAttributeError: ‘module’ object has no attribute ‘outro’ # Assim fcas a conhecer mais mensagens de erro do Python\r\n

\r\n\r\nIsto acontece porque no nosso modulo não está definida nenhuma função chamada outro. Mas como sabemos quais funções estão definidas num dado módulo, uma vez que podemos ter milhares de funções num único módulo?\r\nAli é que entra uma outra função pré-definida do Python, que é a função dir(). Esta função retorna uma lista de Strings com o nome de todas as funções definidas naquele módulo. Já agora tente fazer isso com o nosso recém-criado módulo:\r\n

\r\nimport numeros\r\n>>>dir(numeros)\r\n ['__builtins__', '__doc__', '__file__', '__name__', 'diferenca', 'nada', 'potencia', 'produto', 'quociente', 'soma']\r\n>>>\r\n

\r\nNote que as funções ‘__builtins__’, ‘__doc__’, ‘__file__’, ‘__name__’ são nativas do Python, lembra-se do __doc__. Então se o módulo possui uma função __doc__, ela também pode ter uma Doc String? demorou hein? mas é isso mesmo.\r\n\r\nPorém existem outras formas de se invocar um módulo. Por exemplo, para tratar as funções do módulo como funções do programa, teríamos que importar assim:\r\n

\r\n>>>from numeros import soma,produto\r\n

\r\nAssim em vez de fazer numeros.soma(2,4) faríamos só soma(2,4)\r\n\r\nOu então:\r\n

\r\nfrom numeros import *\r\n

\r\npara importar todas as funções do módulo. Mas não é muito aconselhavel fazer isso. Porque o módulo pode conter funções cujos nomes já estão sendo utilizados dentro do programa, e isso vai gerar certos conflitos com o interpretador.\r\nQuando o módulo tem um nome comprido por exemplo e não queremos repeti-lo toda hora(preguiça!!!), como por exemplo o módulo GameLogic da Game Engine do Blender, podemos usar a seguinte sintaxe:\r\n

\r\nimport GameLogic as g\r\n

\r\nou então:\r\n

\r\nimport GameLogic\r\ng=GameLogic\r\n

\r\nQue importa o módulo e muda o seu nome para g. Assim é só fazer g. em vez de GameLogic..\r\n\r\nBem! como no caso das funções, porque o Python é uma linguagem Open-Source, existem por ai milhares de módulos para efetuar diversas operações. Por isso verifique antes de criar o seu programa, se ainda não existem módulos por ai que fazem exatamente a mesma coisa!, não adianta reinventar a bicicleta né?\r\nVeremos ao longo do curso alguns módulos nativos e alguns módulos incorporados…\r\nPara hoje comecemos com os módulos math e sys, que você vem usando sem saber o que são(mas agora já sabe né?)!!!\r\n

O módulo math

\r\nO módulo math é um módulo nativo do Python, isto é, ele é distribuído juntamente com o interpretador, e possui funções para realizar diversas operações matemáticas.\r\n

O módulo sys

\r\nO módulo sys contém funções de sistema.\r\nAccione as funções dir() e __doc__ sobre estes módulos que você terá mais informações sobre ele(Para que serve, quais funções possui,etc…).\r\n\r\nUma das funções do módulo math é a pi() que retorna o valor exato de pi.\r\n\r\nAgora você já deve perceber o que era aquele script que te ajudou a descobrir os diretórios que estão no Path né?\r\n\r\nPor enquanto ficamos por aqui em termos de módulos, mas mais tarde veremos detalhes destes e outros módulos de Python. Para a próxima aula, falaremos um pouco de escopo de variáveis em Python, para depois entrarmos na leitura e escrita em arquivos em Python. E que tal pensarmos no próximo joguinho??? Veremos na próxima aula!!!!!!\r\nAté breve!!!

\r\n\r\n\r\n
\r\n
\r\n
\r\n

Receba nossas actualizações por email

\r\n
\r\n \r\n \r\n
\r\n

Ver Campanhas anteriores.

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
(Visited 75 times, 1 visits today)
Share