40
Programação Avançada Funções Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012

Programação Avançada Funções

  • Upload
    katina

  • View
    48

  • Download
    0

Embed Size (px)

DESCRIPTION

Programação Avançada Funções. Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012. Introdução. Programas são divididos em subprogramas ou funções Funções são chamadas por um identificador e uma lista de parâmetros Funções podem retornar valores. - PowerPoint PPT Presentation

Citation preview

Programao Avanada

Programao AvanadaFunesProf. Natalia Castro FernandesMestrado em Telecomunicaes UFF2 semestre/2012IntroduoProgramas so divididos em subprogramas ou funesFunes so chamadas por um identificador e uma lista de parmetrosFunes podem retornar valoresFunes em PythonFormato geral:def nome (arg, arg, ... arg):comando. . .comandoNome da funoArgumentos da funo (0 ou mais argumentos)Comandos (0 ou mais)Retorno de funesUma funo pode retornar um valor/estruturaValor calculadoCdigo de erroComando returnUso:return expressoQuando a execuo chega a um return, a funo termina, voltando ao ponto aonde a funo foi chamadaSe nenhum valor de retorno for especificado, a funo retorna Noneexpresso opcionalExemplos

Parmetros de funesParmetros ou entradas ou argumentosPodem ser passados por valor ou refernciaValor = A funo recebe uma cpia da varivel e alteraes do valor dentro da funo no afetam as variveis originaisReferncia = A funo recebe a referncia da varivel e alteraes do valor dentro da funo afetam as variveis originais

Passagem por valorVarivel no modificadaExemplos

Se o parmetro existe, ele precisa ser passadoPassagem por valor

Argumentos padroDeterminam um valor padro para uma determinada entradaNesse caso, a entrada no precisa ser especificadaAssume valor pr-determinadoUso:Formato:def nome (arg1=default1, ..., argN=defaultN)Se apenas alguns argumentos possuem padres, ento esses devem vir por ltimoEvita ambiguidade na definio dos argumentos

Passagem por refernciaModifica o valor da varivel originalFeito com o uso de listas e dicionrios

Contudo...

Por que no mudou?Valor x RefernciaTodos os parmetros so passados por valorA lista e o dicionrio so refernciasO que passado para a funo o endereo do espao de memriaEndereo no pode ser mudado, mas o espao de memria apontado no est protegido e pode ser modificado

Valor x Referncia>>>Lista=[1,3]>>>Lista.append(2)Memria antesMemria depois1,31,3,2>>>Lista=[str]Memria antesMemria depois1,3,21,3,2strLista comea no endereo 2Lista comea no endereo 2Lista comea no endereo 2Lista comea no endereo 7Valor x Referncia>>>Lista=[1,3]>>>funcao(Lista)Estou passando a informao lista que comea no endereo xValor x RefernciaExecutando a funoMemria antesMemria depois1,31,3,2>>>Lista=[str]Memria antesMemria depois1,3,21,3,2strLista comea no endereo xLista comea no endereo xLista comea no endereo xValor interno da lista>>>Lista.append(2)Valor interno da listaValor interno da listaValor interno da listaLista comea no endereo xVariveis locais e globaisVariveis definidas dentro de funes so locaisNo tem valor fora da funo

Variveis definidas fora de funes so globais

Para uma funo usar varivel global, preciso declarar a varivel como global

Variveis locais e globaisExemplos

No faa isso!!!!

Evite usar global!!!Passe valores como argumentos da funo!!!Documentao de funesStrings definidas logo aps o cabealho da funo so vistas como documentaoAcessvel pelo comando funcao.__doc__Exemplo:

Lista de parmetros varivelUma lista de parmetros de tamanho varivel pode ser passada para a funoUso do ltimo argumento com *Todos os valores passados a partir desse ponto so colocados em uma tuplaUso:def funcao(arg1, arg2, ..., *argn)

Lista de parmetros varivelExemploresto =(3,)resto =(3,4,5,6)resto =()Lista de parmetros varivelSe o ltimo argumento for precedido de **Todas as entradas a partir desse ponto so interpretadas como um dicionrio

Lista de parmetros varivelUma lista pode preencher parmetros variveis se vier precedida de *Um dicionrio pode preencher parmetros variveis se vier precedido de **Chaves de variveis simples devem ser iguais ao nome da varivel

Lista de parmetros varivel

Funes como argumentosNomes de funes podem ser usados como variveis

Funes definidas em funesFunes definidas dentro de outras funes tem acesso a seu escopo e tambm ao escopo da funo que a defineEscopo aquilo que est definido dentro de uma rea de cdigoEscopo globalEscopo de uma funoEscopo de uma classeExemplos

Uso do lambdaFunes sem nome que retornam uma expressoUsadas para definir outras funesUsolambda arg1, arg2,...,argn: expressoExemplo:>>> f= lambda x,y: x+y>>> f(1,2)3>>> Uso do filterFiltra os elementos de uma sequncia que atendem a uma certa funo, retornando uma subsequnciaA sequncia pode ser lista, tupla ou string

Uso:filter(funo, sequncia)

Uso do filterExemplos

Retorna os elementos da sequncia cujo resultado da funo True.Uso do mapAplica uma sequncia de elementos a uma funo, retornando os resultados da funo em uma sequncia

Uso:map(funo, sequncia)Uso do mapExemplos

Uso do reduceAplica uma funo repetidamente, utilizando os elementos de sequnciaA funo precisa receber dois elementosO primeiro elemento pode ser especificado opcionalmenteUso:reduce(funo, sequncia,inicializador_opcional)Uso do reduceExemplo:

>>> reduce(lambda a,b: a+b , range(5))10Isso equivalente a f(a,b)=a+bEnto: f(f(f(1,2),3),4)=10

>>> reduce(lambda a,b: a+b, range(2,5),1)10f(f(f(1,2),3),4)RecursividadeForma de resolver problemasResoluo de uma funo implica em rechamar essa mesma funoExemplo:Fibonaccidef Fibonacci(i):if i==0: return 0if i==1: return 1return Fibonacci(i-1)+Fibonacci(i-2)i-simo elemento da sequncia

Exerccio Calcule a funo fatorial recursivamenteCalcule o e-nsimo elemento de uma PA recursivamenteGuarde, em uma lista, os n+1 elementos de uma PA recursivamente

Faa um programa que calcula a rea de uma forma geomtrica. Os parmetros para calcular a rea devem ser passados para a funo como parmetros, assim como o nome da forma. O seu programa deve ser capaz de responder a quadrado, retngulo, crculo e tringulo. Ex:Area(triangulo,base,altura)Area(circulo,raio)Calcule os 10 primeiros elementos da srie de Fibonacci usando o mapCalcule a funo fatorial usando o reduce