260 likes | 404 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!!!
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: • 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)