0% acharam este documento útil (0 voto)
21 visualizações40 páginas

Python 06

O documento discute o conceito de funções em Python, definindo-as como blocos de código reutilizáveis que podem receber entradas e retornar saídas. É explicado como definir funções sem e com parâmetros e como utilizar escopo global e local de variáveis. Também são discutidos conceitos como funções anônimas lambda e recursividade.

Enviado por

Melissa Couto
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
21 visualizações40 páginas

Python 06

O documento discute o conceito de funções em Python, definindo-as como blocos de código reutilizáveis que podem receber entradas e retornar saídas. É explicado como definir funções sem e com parâmetros e como utilizar escopo global e local de variáveis. Também são discutidos conceitos como funções anônimas lambda e recursividade.

Enviado por

Melissa Couto
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 40

Funções

O que é uma função ?


“Sinónimo” de rotina, procedimento

- Funções intrínsecas do Python ( print () , input ()… )


- Funções intrínsecas dos módulos Python

- Funções definidas pelo utilizador

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 1


Funções
Forma de fornecer input e receber output.

Se existir um bloco de código que se repete


varias vezes ao longo de um programa pode-
se definir uma função e chamar essa função
quantas vezes as necessárias.

As funções tornam-se fundamentais quando temos muitas


linhas de código.

Nota: Nem todas as funções fornecem output.


Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 2
Funções
Definir uma função
def func():
# código que corre sempre que se chama a função
print("Isto é um teste")

Para chamar a função ao longo do código é usar o


nome definido
ATENÇÃO:
func()
O Python depende da indentação (espaço
em branco no início de uma linha) para
definir o âmbito do código.

Na linha anterior à indentação :


Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 3
Funções
As regras básicas para denominar uma função são
semelhantes às variáveis.
def multiplica():
a =2
b=3
return a*b

ATENÇÃO:

Antes de chamar uma função tem de estar definida.

As variáveis dentro de funções são variáveis locais e antes de


correr a função não estão definidas.

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 4


Funções / Exemplo
Criar um programa para mostrar o seguinte texto no
ecrã.

**********
ISEL
**********
ISEL
**********

Clássico
print ("***********")
print (" ISEL ")
print ("***********")
print (" ISEL ")
print ("***********")
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 5
Funções / Exemplo
Mas desta vez usar funções.

Funções
def a():
print ("**********")
def b():
print (" ISEL ")

a()
b()
a()
b()
a()

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 6


Funções
Os parâmetros são as variáveis listadas entre parênteses na
definição da função. Eles atuam como marcadores de posição para
os valores que serão usados na função.
Por exemplo, na função abaixo, x e y são parâmetros:
def soma(x, y):
return x+y

Os argumentos são os valores reais fornecidos (e recebidos pela


função) quando a função é chamada.
Por exemplo se se chamar a função soma com os números 2 e 3, 2
e 3 são os argumentos.
Resultado = soma (2,3)

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 7


Funções
Definir uma função com parâmetros

Os parâmetros são colocados entre parêntesis e podem ser um ou


mais.

def func2(n1, n2):


print(n1 + n2)

Para chamar a função com argumentos ao longo do código será


func2(4, 5) 9

Uma vez definida a função podemos utilizar outros argumentos


func2(10, 2) 12
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 8
Funções
Quando se define a função
def func3(n1, n2):
return n1 + n2

É possível utilizar os argumentos pela ordem que são utilizados,


resultado = func3(5, 4)

ou então usar outra sintaxe e em que se nomeia expressamente as


variáveis.
resultado = func3(n2=4, n1=5)
print(resultado)

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 9


Funções
Pode-se também definir um valor padrão para os parâmetros na
função.

def teste(cidade = “Lisboa”):


print (“Eu sou de” , cidade)

teste()

Eu sou de Lisboa

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 10


Funções
Com funções podemos ter dois tipos de resultados:

- Realizar uma tarefa


def func3(n1, n2):
print (n1 * n2)

- Retornar um resultado
def func3(n1, n2):
return (n1 * n2)

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 11


Funções
Definir uma função com return

def func3(n1, n2):


return n1 + n2

Executando a função func3(4, 5) a resposta será nula porque o


valor de return é guardado em memória mas não mostrado.
Para mostrar o valor teria de se atribuir uma variável ao retorno e
depois mostrar.
resultado = func3(4, 5)
print (resultado)
A vantagem desta abordagem é permitir outras operações com esta
mesma variável.

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 12


Funções
De uma função resulta sempre um resultado, mesmo que não
exista output direto:
def soma(): def teste(): def teste2(): def teste3():
a=2 return (431) return True return “1234”
b=3
return a+b Resultado Resultado Resultado sting
número inteiro booleano True “1234”
Resultado numérico 431
de uma equação

def teste4 (): def teste5 ():


return None ou print (“Numero”) mesmo que seja
um resultado nulo
Resultado Nulo Resultado Nulo,
usando return Realiza tarefa mas não
guarda em memória

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 13


Funções
Variáveis Locais e Globais:
nome = "Maria"
idade = 32
def sauda():
idade += 1
return "Parabens " + nome + ", a tua idade e " + str(idade)

sauda() UnboundLocalError: local variable 'idade' referenced before assignment

Escopo/âmbito (Scope) - é a área na qual uma variável é definida, acedida e


reescrita. As variáveis podem ser locais ou globais.

Por padrão, todas as variáveis definidas dentro de uma função são locais - não
se podem aceder fora da função. E como o escopo dentro da função é
diferente do global, é mesmo possível usar o mesmo nome para duas variáveis
diferentes se uma for global e outra local (não é contudo uma prática
aconselhável).
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 14
Funções
Variáveis Locais e Globais:
Para corrigir teria de se declarar a variável idade como uma variável global
nome = "Maria"
idade = 32
def sauda():
global idade
idade += 1
return "Parabens " + nome + ", a tua idade e " + str(idade)

sauda()
A variável nome não causa um erro porque apenas se está a aceder ao seu valor
dentro da função sauda, não a modificando. Quando se acede a uma variável dentro
de uma função, o Python primeiro procura essa variável dentro do escopo da função.
Se não encontrar a variável, procurará no âmbito global.
Como se está a usar a variável nome dentro da função sem modificá-la, o Python não
gera um erro. No entanto, com a variável idade, está modificar-se o seu valor dentro
da função, o que requer que se declare explicitamente como uma variável global
usando a palavra-chave global.
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 15
Funções
Variáveis Locais e Globais:

Usar variáveis globais é geralmente uma má prática e deve-se


evitar, pois torna o propósito de suas funções menos óbvio e
pode-se acabar com um código 'espaguete'. Uma melhor maneira
de fazer é passar a idade variável como um dos argumentos da
função (exemplo abaixo)

def sauda(nome, idade):


idade += 1
return "Parabens " + nome + ", a tua idade e " + str(idade)

sauda(“Maria“, 32)

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 16


Funções anónimas : Lambda
As funções lambda são funções anónimas definidas usando a
palavra chave lambda.
A sintaxe geral de uma função lambda é:
lambda argumentos: expressão
As funções Lambda são usadas quando precisamos de uma função
para um curto período de tempo e principalmente em combinação
com outras funções

Exemplo: f = lambda x : x + 10
print (f(5))

15

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 17


Funções anónimas : Lambda
•Vantagens: As funções Lambda são usadas para reduzir a
quantidade de código e simplificar a leitura.
•Desvantagens: Como as funções Lambda são limitadas a uma
única expressão, elas são menos poderosas do que as funções
regulares.
Outros exemplos:

b = lambda x, y: x * y f = lambda x: 'par' if x % 2 == 0 else 'ímpar'


print(b(5, 3)) print(f(7))

15 ímpar

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes 18


Recursividade
A recursividade é o processo de
repetição de um objeto/processo de
forma similar ao que já foi mostrado.

Na prática em programação a
recursividade serve para reduzir um
problema à sua forma mais simplificada.

Do ponto de vista do algoritmo é uma


técnica em que uma função se chama a si
própria.
Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 19
Recursividade
Como o objetivo é não ter uma recursão
infinita deverão existir cláusulas:

- 1 ou mais elementos de base (que fecham


a recursão)
- 1 elemento de recursão que permite obter
elementos a partir de outros elementos

Uma das forma de entender a recursividade é compará-la com um


ciclo iterativo.

Nos sides seguintes mostra-se a abordagem iterativa e uso do


conceito de recursividade

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 20


Iteração - for
Programação iterativa (for) não recursiva
def factor(n): n ! = n * (n-1) * (n-2) * (n-3) * …. * 1

resultado=1
for i in range (1, n+1): Iteração
resultado=resultado * i Valor corrente da computação
return resultado
Exemplo: factor(3) O range cria uma sequência de inteiros 1, 2, 3

i=1 i=2 i=3


resultado=1*1 = 1 resultado=1* 2 = 2 resultado=2* 3 = 6

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 21


Iteração - while
Programação iterativa (while) não recursiva
def factor(n): n ! = n * (n-1) * (n-2) * (n-3) * …. * 1

resultado=1
while n >= 1: Iteração
resultado=resultado * n Valor corrente da computação
n=n-1 Valor corrente da
variável de iteração
return resultado
Exemplo: factor(3)
n n
n=3 resultado =1 * 3 = 3 resultado =3 * 2 = 6
3 >= 1 2 >= 1
resultado=1 n = 3 - 1 =2 n=2-1=1

n n
resultado =6 * 1 = 6 0 >= 1
1 >= 1
n=1-1=0
X
Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 22
Recursividade
Programação recursiva n ! = a * (n-1) * (n-2) * (n-3) * …. * 1

= a * (n-1) * (n-2) * (n-3) * …. * 1

- elemento de recursão que simplifica o (n-1)!


problema a uma versão mais simples. O
caso recursivo é onde a função se = n * ( n -1)!
chama
Redução recursiva

- elemento base - é a condição que n= 0 , resultado = 1


permite que a recursão pare.

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 23


Recursividade
Programação recursiva
def factor(n):
if n==0:
return 1 Caso base
else:
Caso recursivo
return n * factor(n-1)
Exemplo: factor(3)
Fase desenrolar

factor(3) =3 * factor(2) =2 * factor(1) =1 * factor(0) =1

Fase enrolar

6 factor(3) =3 * 2 factor(2) =2 * 1 factor(1) =1 * 1 factor(0) =1

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 24


Recursividade exemplo
Programação recursiva
aplicada à sequência de
Fibonacci:

1,1,2,3,5, ………
1 n<=1
fib(n)
fib(n-1)+fib(n-2) n>2

def fib(n):
if n<=1:
return n n = int(input(“Numero ?”))
else: for i in range(n):
return fib(n-1) + fib(n-2) print(fib(i))

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 25


Recursividade exemplo
Programação recursiva aplicada a strings (verificar se uma frase
é uma capicua ou palíndromo):
def cap(res):
if len(res)<=1:
return True
elif res[0]==res[-1]:
return cap(res[1:-1])
else:
return False

frase="A torre da derrota"


frase=frase.lower()
res=""
for letra in frase:
if letra in "abcdefghijklmnopqrstuvxyz":
res=res + letra

cap(res)
Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 26
Erros
Um erro é um problema num programa que impede o programa de
concluir sua tarefa. Uma das classificações para os erros:

• Erros de sintaxe: Erros que ocorrem quando o código não está


escrito de acordo com a gramática do Python.
(Exemplos: Esquecer de fechar aspas, esquecer dois pontos no final de uma declaração
de uma função, etc.)

• Exceções: Erros que ocorrem quando o código é executado e não


pode ser concluído.
(Exemplos: TypeError, uma operação é aplicada ao tipo de objeto errado, ValueError
ocorre quando uma função recebe um argumento do tipo certo, mas valor inapropriado)

Existem diferentes tipos de erros em Python, incluindo TypeError,


ValueError, NameError, FileNotFoundError, e muitos outros.

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros
AssertionError A função assert falhou StopIteration A função next() indica que não há mais
AttributeError A atribuição a uma referência falha. nenhum item a ser devolvido pelo
EOFError A função input() atingiu a condição eof. iterador.
FloatingPointError Uma operação de ponto flutuante SyntaxError Um erro de sintaxe é encontrado.
falhou. IndentationError Uma indentação incorreta.
GeneratorExit O gerador do método close() é invocado TabError A indentação consiste em tabs e
ImportError O módulo importado não é encontrado espaços inconsistentes
IndexError O índice de uma sequencia está fora do SystemError O interpretador deteta um erro interno.
intervalo. SystemExit Criado pela função sys.exit()
KeyError Uma chave não é encontrada num TypeError Uma função ou operação é aplicada a
dicionário. um objeto de tipo incorreto.
KeyboardInterrupt O utilizador prime uma tecla de UnboundLocalError Uma referência é feita a uma variável
interrupção (Ctrl+c ou delete). local em uma função ou método, mas
MemoryError Uma operação fica sem memória. nenhum valor foi ligado a essa variável.
NameError Uma variável não se encontra no âmbito UnicodeError Ocorreu um erro de codificação ou
local ou global. descodificação relacionado com o
NotImplementedError Criado por métodos abstratos. Unicode.
OSError Uma operação do sistema causa um erro UnicodeEncodeError Ocorreu um erro relacionado com o
relacionado com o sistema. Unicode durante a codificação.
OverflowError O resultado de uma operação aritmética UnicodeDecodeError Ocorreu um erro relacionado com o
é demasiado grande para ser Unicode durante a descodificação
representado. UnicodeTranslateError Ocorreu um erro relacionado com o
ReferenceError Erro de referência no acesso ao gestor de Unicode durante a tradução.
memória (garbage collected referent). ValueError Uma função obtém um argumento de
RuntimeError Um erro que não se enquadra em tipo correto mas de valor impróprio.
qualquer outra categoria. ZeroDivisionError O segundo operador de uma operação
de divisão ou módulo é zero.
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes
Erros
A razão mais comum de um erros em Python são erros de
sintaxe. O Python reporta geralmente o local e a razão do erro.

a=33
b=200
if b>a:
print "b maior que a"

----------------------------------------------
File "<ipython-input-4-41a8a2c99232>", line 4
print "b maior que a"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("b maior que a")?

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros
A linguagem tenta identificar qual o linha do erro, Mas por vezes o
erro situa-se na linha imediatamente anterior à identificada.
x=5
if x < 6:
File "<ipython-input-131-8d6cf11a36d0>", line 4
print ("Isto é teste" print("Isto é teste2")
print("Isto é teste2") ^ SyntaxError: invalid syntax

Neste exemplo faltam os parêntesis

outras vezes na linha especificada.


----------------------------------------------
NameError Traceback (most recent call last)
a=33 <ipython-input-3-7b7e146feb0a> in <module>
b=200 2 b=200
if b>a: 3 if b>a:
----> 4 printa("b maior que a")
printa("b maior que a") NameError: name 'printa' is not defined

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros - raise
A função raise em Python é usada para criar exceções e personalizar
as mesmas.
n=-5
if n < 0:
raise ValueError("O número não é positivo")
else:
print(n) Neste exemplo, estamos executando uma exceção/erro
ValueError com a mensagem “O número não é positivo ”.

------------------------------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [10], in <cell line: 2>()
1n=-5
2 if n < 0:
----> 3 raise ValueError("O número não é positivo")
4 else:
5 print(n)

ValueError: O número não é positivo

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros
É possível lidar com os erros identificando-os e criando mecanismos
de gestão dos mesmos.
try :
Instruções que durante a execução podem causar erros
except:
Instruções que se executam sempre que ocorre um erro
na execução do bloco try correspondentes
else:
Instruções que se executam quando não ocorrem erros na
execução do bloco try correspondente
finally:
Instruções que se executam sempre que ocorram ou não
erros durante a execução do bloco try correspondente

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros
O try/except são usados para capturar e lidar com erros. O código
que pode gerar o erro é colocado dentro do bloco try e o código que
manipula a erro é escrito no bloco except. x=0
try:
y=1/x
except ZeroDivisionError:
y=0
print (y)

Podemos ter vários blocos erros para lidar com diferentes tipos
de erros. try:
# código que pode lançar vários erros
except ValueError:
# lidar com ValueError
except TypeError:
# lidar com TypeError

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros
A função else num bloco try/except permite definir um bloco de
código a ser executado se nenhum erro for lançada..
try:
# código que pode lançar um erro
except ValueError:
# lidar com ValueError
else:
# código a ser executado se nenhum erro for lançado
A função finally permite definir um bloco de código a ser executado
sempre, independentemente de um erro ter sido lançado ou não.
try:
# código que pode lançar um erro
except ValueError:
# lidar com ValueError
finally:
# código a ser executado sempre, independentemente de um erro ter sido lançado ou não

Licenciatura em Engenharia Biomédica Programação, Nelson Nunes


Erros - Exemplo
a=5 Se
b=0 a=5
b = “b”
try:
c=(a/b) a, b tem de ser numeros
Se Isto aparece sempre
except ZeroDivisionError:
print("Divisão por zero, b tem de ser
diferente de 0") a=5
b=2
except TypeError:
print("a, b tem de ser numeros")
2.5
else:
print(c) Isto aparece sempre
finally:
print("Isto aparece sempre")

Divisão por zero, b tem de ser diferente de 0


Isto aparece sempre
Licenciatura em Engenharia Biomédica Programação, Nelson Nunes
Controlo fluxos
break, continue e pass são palavras-chave em Python usadas para
alterar o fluxo de loops e blocos de código com base em condições
específicas.

break: interrompe a execução do loop ou da instrução condicional.


continue: salta para a próxima iteração do loop.
pass: indica um bloco de código vazio

break - se quiser sair de um loop completamente,


continue - se quiser saltar uma iteração específica do loop
pass - se quiser um espaço reservado para código que será escrito
no futuro.

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 36


Controlo fluxos - break
A declaração break é usada para interromper a
execução de um loop ou de uma instrução condicional.
Interrompe a execução do loop mais interno e transfere
a execução para a próxima instrução após o loop.
for x in range(50):
print (x)
if x==5: 0
break 1
2
3
4
5

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 37


Controlo fluxos - break
A declaração break pode ser usada para sair de loops
infinitos.
i=5 lista = []
a=0 while True:
while i ==5: nome=input(“Nome:”)
print ('Loop infinito') if nome=="stop":
a=input("Escreva stop para parar !!!") break
if a=="stop": else:
break lista.append(nome)

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 38


Controlo - continue
Há situação em que não queremos interromper um ciclo
mas apenas retomá-lo em certos casos . Podemos por
separar um ciclo em duas partes usando o comando
continue. Esta função é usada para saltar a iteração atual
do loop e continuar com a próxima iteração.

for i in range(10): 0
if i == 5 or i==2: 1
continue 3
print(i) 4
6
7
8
9

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 39


Controlo - pass
Certas instruções não podem estar vazias, mas se, por
algum motivo, existir uma instrução sem conteúdo,
pode-se colocar a instrução pass para evitar obter um
erro. É usada como um espaço reservado quando a
sintaxe requer algum código, mas não se quer que
nada aconteça.

a = 33
b = 200

if b > a:
pass

Licenciatura em Engenharia Biomédica, ISEL Programação , Nelson Nunes 40

Você também pode gostar