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 expressão é opcional 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 Exemplos 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 Passagem por valor 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 Lista – começa no endereço 2 1,3,2 ‘str’ Lista – começa no endereço 7 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 Valor interno da lista Memória depois 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 Valor interno da lista Memória depois 1,3,2 Lista – começa no endereço x Valor interno da lista 1,3,2 ‘str’ 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 Não faça isso!!!! Evite usar global!!! Passe valores como argumentos da função!!! 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 =() Recursividade Forma de resolver problemas Resolução de uma função implica em rechamar essa mesma função Exemplo: i-ésimo elemento da sequência Fibonacci def Fibonacci(i): if i==0: return 0 if i==1: return 1 return Fibonacci(i-1)+Fibonacci(i-2) 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)