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!!!
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
Lista de parâmetros 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
Exemplos
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:
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)
 Calcule os 10 primeiros elementos da série de Fibonacci usando o map
 Calcule a função fatorial usando o reduce
Download

Programação Avançada Funções