400 likes | 548 Views
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.
E N D
Programação AvançadaFunçõ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
Funções em Python • Formato geral: • def nome (arg, arg, ... arg): • comando • . . . • comando Argumentos da função (0 ou mais argumentos) Nome da função Comandos (0 ou mais)
Retorno de funções • Uma função pode retornar um valor/estrutura • Valor calculado • Código de erro • Comando return • Uso: • return expressão • Quando a execução chega a um return, a função termina, voltando ao ponto aonde a função foi chamada • Se nenhum valor de retorno for especificado, a função retorna None expressão é opcional
Parâmetros de funções • Parâmetros ou entradas ou argumentos • Podem ser passados por valor ou referência • Valor = A função recebe uma cópia da variável e alterações do valor dentro da função não afetam as variáveis originais • Referência = A função recebe a referência da variável e alterações do valor dentro da função afetam as variáveis originais
Passagem por valor • Variável não é modificada • Exemplos Se o parâmetro existe, ele precisa ser passado
Argumentos padrão • Determinam um valor padrão para uma determinada entrada • Nesse caso, a entrada não precisa ser especificada • Assume valor pré-determinado • Uso: • Formato: • def nome (arg1=default1, ..., argN=defaultN) • Se apenas alguns argumentos possuem padrões, então esses devem vir por último • Evita ambiguidade na definição dos argumentos
Passagem por referência • Modifica o valor da variável original • Feito com o uso de listas e dicionários
Contudo... Por que não mudou?
Valor x Referência • Todos os parâmetros são passados por valor • A lista e o dicionário são referências • O que é passado para a função é o endereço do espaço de memória • Endereço não pode ser mudado, mas o espaço de memória apontado não está protegido e pode ser modificado
Valor x Referência >>>Lista=[1,3] >>>Lista.append(2) Memória antes Memória depois 1,3 1,3,2 Lista – começa no endereço 2 Lista – começa no endereço 2 >>>Lista=[‘str’] Memória antes Memória depois 1,3,2 1,3,2 ‘str’ Lista – começa no endereço 7 Lista – começa no endereço 2
Valor x Referência >>>Lista=[1,3] >>>funcao(Lista) Estou passando a informação lista que começa no endereço x
Valor x Referência • Executando a função >>>Lista.append(2) Memória antes Memória depois Valor interno da lista Valor interno da lista 1,3 1,3,2 Lista – começa no endereço x Lista – começa no endereço x >>>Lista=[‘str’] Memória antes Memória depois Valor interno da lista Valor interno da lista 1,3,2 1,3,2 ‘str’ Lista – começa no endereço x Lista – começa no endereço x
Variáveis locais e globais • Variáveis definidas dentro de funções são locais • Não tem valor fora da função • Variáveis definidas fora de funções são globais • Para uma função usar variável global, é preciso declarar a variável como global
Variáveis locais e globais • Exemplos
Evite usar global!!! Passe valores como argumentos da função!!!
Documentação de funções • Strings definidas logo após o cabeçalho da função são vistas como documentação • Acessível pelo comando funcao.__doc__ • Exemplo:
Lista de parâmetros variável • Uma lista de parâmetros de tamanho variável pode ser passada para a função • Uso do último argumento com * • Todos os valores passados a partir desse ponto são colocados em uma tupla • Uso: • def funcao(arg1, arg2, ..., *argn)
Lista de parâmetros variável • Exemplo resto =(3,) resto =(3,4,5,6) resto =()
Lista de parâmetros variável • Se o último argumento for precedido de ** • Todas as entradas a partir desse ponto são interpretadas como um dicionário
Lista de parâmetros variável • Uma lista pode preencher parâmetros variáveis se vier precedida de * • Um dicionário pode preencher parâmetros variáveis se vier precedido de ** • Chaves de variáveis simples devem ser iguais ao nome da variável
Funções como argumentos • Nomes de funções podem ser usados como variáveis
Funções definidas em funções • Funções definidas dentro de outras funções tem acesso a seu escopo e também ao escopo da função que a define • Escopo é aquilo que está definido dentro de uma área de código • Escopo global • Escopo de uma função • Escopo de uma classe
Uso do lambda • Funções sem nome que retornam uma expressão • Usadas para definir outras funções • Uso • lambda arg1, arg2,...,argn: expressão • Exemplo: >>> f= lambda x,y: x+y >>> f(1,2) 3 >>>
Uso do filter • Filtra os elementos de uma sequência que atendem a uma certa função, retornando uma subsequência • A sequência pode ser lista, tupla ou string • Uso: • filter(função, sequência)
Uso do filter • Exemplos Retorna os elementos da sequência cujo resultado da função é True.
Uso do map • Aplica uma sequência de elementos a uma função, retornando os resultados da função em uma sequência • Uso: • map(função, sequência)
Uso do map • Exemplos
Uso do reduce • Aplica uma função repetidamente, utilizando os elementos de sequência • A função precisa receber dois elementos • O primeiro elemento pode ser especificado opcionalmente • Uso: • reduce(função, sequência,inicializador_opcional)
Uso do reduce • Exemplo: >>> reduce(lambda a,b: a+b , range(5)) 10 • Isso é equivalente a f(a,b)=a+b • Então: f(f(f(1,2),3),4)=10 >>> reduce(lambda a,b: a+b, range(2,5),1) 10 • f(f(f(1,2),3),4)
Recursividade • Forma de resolver problemas • Resolução de uma função implica em rechamar essa mesma função • Exemplo: • Fibonacci def Fibonacci(i): if i==0: return 0 if i==1: return 1 return Fibonacci(i-1)+Fibonacci(i-2) i-ésimo elemento da sequência
Exercício • Calcule a função fatorial recursivamente • Calcule o e-nésimo elemento de uma PA recursivamente • Guarde, em uma lista, os n+1 elementos de uma PA recursivamente • Faça um programa que calcula a área de uma forma geométrica. Os parâmetros para calcular a área devem ser passados para a função como parâmetros, assim como o nome da forma. O seu programa deve ser capaz de responder a ‘quadrado’, ‘retângulo’, ‘círculo’ e ‘triângulo’. Ex: • Area(‘triangulo’,base,altura) • Area(‘circulo’,raio) • Calcule os 10 primeiros elementos da série de Fibonacci usando o map • Calcule a função fatorial usando o reduce