26
 Python: Python: Funções Funções Rodrigo de To ledo OBS: Este ppt não é o definitivo (Versão Beta)

Python 06 Funcao

Embed Size (px)

Citation preview

  • Python: FunesRodrigo de Toledo

    OBS: Este ppt no o definitivo (Verso Beta)

  • Evitando repetiesEm computao sempre queremos evitar repeties.Toda vez que fazemos copy&paste de algum cdigo, provvel que estejamos programando mal.

    Vrias linguagens de programao incluem o conceito de subprograma (ou subrotina)Atribui-se um nome uma seqncia de comandos, e faz-se referncia a este nome nos vrios lugares do programa onde a seqncia em questo deveria ser repetida.Em Python, sub-programas tm o nome de funesFormato geral:def nome (arg, arg, ... arg): comando . . . comando

  • MotivaoFaa um programa que apresente um menu com as seguintes opes: (a)xxxx, (b)yyyy, (c)wwww, (d)zzzz e (e)Sair. Quando for a.......print "(a)xxxx\n(b)yyyy\n(c)wwww\n(d)zzzz\n(e)Sair opcao = raw_input("Entre com a opcao: ") while opcao != "e": ... print "(a)xxxx\n(b)yyyy\n(c)wwww\n(d)zzzz\n(e)Sair opcao = raw_input("Entre com a opcao: ")Garanta que o usurio entrou com a opo certa, seno leia novamente.Para no repetir tudo isso duas vezes, vamos colocar numa funo

  • Retornando um valorUma funo pode retornar um valor. Exemplo:def menu(): print "(a)xxxx\n(b)yyyy\n(c)wwww\n(d)zzzz\n(e)Sair letra = raw_input("Entre com a opcao: ") while letra < a or letra > e: print Opcao invalida! letra = raw_input("Entre com a opcao novamente: ") return letra opcao = menu() while opcao != "e": ... opcao = menu()Observar:Comando returnA funo tem que ser definida antes de ser usadaPor exemplo, digitada no alto do arquivo .py

  • Vantagens de evitar repetiesMenos trabalhoMais legvelDividir grandes tarefas de computao em tarefas menorespermite pensar num problema em diversos nveismodularizaoMenos chances de bugsFacilita a manutenoCdigo menor.

  • Definindo funesEm Python, sub-programas tm o nome de funesFormato geral:def nome (arg, arg, ... arg): comando . . . comandoOnde:nome o nome da funoargs so especificaes de argumentos da funoUma funo pode ter nenhum, um ou mais argumentoscomandos contm as instrues a serem executadas quando a funo invocada

  • Resultado de funesUma funo tipicamente computa um ou mais valoresPara indicar o valor a ser devolvido como o resultado da funo, usa-se o comando return, que tem o formatoreturn expressoonde a expresso opcional e designa o valor a ser retornadoAo encontrar o comando return, a funo termina imediatamente e o controle do programa volta ao ponto onde a funo foi chamadaobserve que pode haver mais de um return dentro da funoSe uma funo chega a seu fim sem nenhum valor de retorno ter sido especificado, o valor de retorno None

  • Exemplo>>> def f(): return

    >>> print f()None>>> def f(): return "Oi" >>> print f()Oi>>> def f(nome): return "Oi, " + nome + "!" >>> print f("Joao")Oi, Joao!

  • Argumentos de funesArgumentos (ou parmetros) so como variveis que recebem seus valores iniciais do chamadorEssas variveis, assim como outras definidas dentro da funo so ditas locais, isto , s existem no lugar onde foram definidasAo retornar ao ponto de chamada, as variveis locais so descartadasSe uma funo define n argumentos, a sua chamada deve incluir valores para todos eles Exceo: argumentos com valores default

  • Exemplo>>> def quadrado(x): return x*x

    >>> print quadrado(10)100>>> print x....NameError: name 'x' is not defined>>> print quadrado()....TypeError: quadrado() takes exactly 1 argument (0 given)

  • Funo chamando funoUma funo pode ser chamada por outra funo, e assim por diante. Ou seja, existe uma pilha de chamadas de funo (call stack).Altere a funo menu para que permita que o usurio entre com minsculas ou maisculasdef minusc(letrinha): if A
  • Variveis LocaisAs variveis de uma funo NO tem NENHUMA relao com as variveis da outra (o programa tambm uma funo). Ou seja, se voc mencionar uma varivel na funo1 declarada na funo2 ir dar erro. Outra conseqncia que podem existir variveis com mesmo nome em funes diferentes e nada tero em comum (alm do nome).O valor de uma varivel que pertena a uma determinada funo morre quando essa funo termina. Ou seja, toda vez que uma funo chamada como se ela estivesse sendo executada pela primeira vez.Argumentos tambm so variveis locais e valem as mesmas regras.Evitem variveis globais!

  • Alterando parmetros possvel alterar parmetros? Sim e noComo o parmetro uma varivel local, ele pode ser alterado sem problemasEntretanto, se um parmetro recebe um valor que vem de uma varivel, esta no alteradaEx.:>>> def quadrado(x): x = x*x return x>>> x = 10>>> print quadrado(x)100>>> print x10

  • Alterando parmetros(alterando contedo de listas) Note que quando passamos uma varivel do tipo lista como parmetro, estamos passando uma referncia para um valor do tipo listaNesse caso, alterar o parmetro pode influenciar no valor do contedo da listaExempo:>>> def f(x):x[:] = [5]>>> a = [1,2,3]>>> f(a)>>> a[5]

  • Retorno de mais de um valorPython permite o retorno de mais de um valor.Exemplo:

    >>> def minmax(x,y): if x>> a = 5>>> b = 10>>> menor,maior = minmax(a,b)>>> menor5>>> maior10

  • ObservaesA declarao da funo deve ser feita antes da sua chamada na outra funo para que o Python reconhea o seu nome.Os valores passados como parmetros na funo chamadora, sero recebidos pela funo chamada exatamente na mesma ordem.Uma funo pode chamar a si prpria, isso chamado de funo recursiva. Cada vez que a funo chamada, uma nova instncia de suas variveis e parmetros criada.No pode haver funes e variveis com o mesmo nome!

  • ExerccioAltere programas que usavam menu para que sejam usados com funo!Exerccios j passados com menu:Hortifruti(esse o mais interessante para treinar)FarmciaAlunos de PythonUPA (esse tem na pgina)Hotel (P2 2010.2)Faa uma funo para receber a opo do usurioAteno: para cada opo, faa uma funo diferente, passando os parmetros necessriosExemplo:opcao = menu() while opcao != e: if opcao == a: incluir(alunos) elif opcao == b: excluir(alunos) ...

  • ExerccioFaa o seguinte:Faa uma funo que receba um valor inteiro e retorne a diviso por 10 e o resto dessa diviso.Faa uma funo que receba um nmero inteiro entre 0 e 9 e retorne uma string com o nome do algarismo por extenso.Faa um programa que imprima invertido os nomes do algarismos de um nmero inteiro. (Use suas funes!)Ex: 234 sada: quatro trs doisFaa uma funo que calcule o peso ideal de uma pessoa. A funo deve receber o valor da altura da pessoa e um valor numrico indicando o sexo (0 - masculino e 1 - feminino). A funo deve calcular o peso ideal de acordo com as seguintes frmulas: homens (72.7 * altura) - 58 e mulheres (62.1 * altura) - 44.7.Faa um programa para ler a altura e o sexo de um conjunto de pessoas e imprimir o peso ideal at que seja digitado um valor negativo para altura.

  • import(mdulos)

  • Mdulos?Voc viu como reutilizar cdigo atravs do uso de funes. Como fazer para usar suas funes em outros programas que voc escrever?Resposta: MdulosUm mdulo basicamente um arquivo contendo funes e variveis que voc definiu. Para reutilizar o mdulo em outros programas o arquivo deve ter uma extenso .py.Um mdulo pode ser importado por outro programa para que este possa fazer uso da sua funcionalidade. Python fornece uma biblioteca padro com inmeras funes em diversos mdulos j preparadas para uso.

  • Importando um mduloexemplo....import XImporta o mdulo X, e cria uma referncia para esse mdulo no namespace atual. Voc pode usar X.nome para se referenciar a funes definidas no mdulo X.from X import *Semelhante a instruo anterior, porm todas as definies dentro de X so criadas diretamente no namespace atual.Voc pode usar simplesmente nome para se referenciar a funes definidas no mdulo X.from X import f1, f2, f3Comportamento igual ao anterior, mas apenas as funes f1, f2 e f3 so acessveisIsso especialmente til para mdulos com muitas funes por dois motivos:Evita conflito de nomes com o namespace atualReduz tempo de carga do mduloX.pyc

  • Criando seu prprio mduloCriar seus prprios mdulos fcil, voc j est fazendo isso o tempo todo! Cada programa Python tambm um mdulo. Voc apenas tem que se certificar que tem uma extenso .pyExemplo:# Filename: mymodule.py def sayhi(): print 'Hi, this is mymodule. version = '0.1' # End of mymodule.py # Filename: mymodule_demo.py import mymodule

    mymodule.sayhi() print 'Version', mymodule.version $ python mymodule_demo.py Hi, this is mymodule. Version 0.1 # Filename: mymodule_demo2.py from mymodule import sayhi, version # Alternative: # from mymodule import *

    sayhi() print 'Version', version Obs: o mdulo tem que estar na mesma pasta do programa ou em um diretrio conhecido do Python...

  • Exemplo de um mdulomenus.py

  • Exerccio CalculadoraFaa um programa que leia dois nmeros (exemplo: a, b) na entrada e ento apresente o seguinte menu:1-Soma 2-Subtrao (a-b) 3-Multiplicao 4-Diviso (a/b, decimais) 5-Potenciao (ab) 6-Fatorial de ambos 7-Inserir novos nmeros 8-SairObs1: Use a funo menu_numerico do mdulo menus.pyObs 2: Use funes recursivas (que chamam a si mesmas) para a potenciao e para o fatorial

  • Mdulo MATHyx

  • Mdulo SysPYCPATH

    ***********http://www.htmlstaff.org/ver.php?id=20602*http://effbot.org/zone/import-confusion.htm*http://www.ibiblio.org/g2swap/byteofpython/read/making-modules.html*http://effbot.org/zone/import-confusion.htm*