Aventurando-se com Python
Quarta Aula

Funções

Funções

'''
Vamos imaginar que temos uma parte em nosso código, que está se
repetindo muitas vezes. Nos seria conveniente, se pudéssemos fazer
esse código apenas uma vez e apenas reutiliza-lo quando precisássemos
novamente, sem ter que escrever ele de novo. Podemos fazer isso com
uma função. Ela é uma maneira de reutilizar código.
Vamos imaginar que precisamos imprimir diversas vezes uma mensagem.
'''
i = 0
'''
Aqui seria um trecho de código, onde faço algo
'''
i += 1
print('Essa é a ' + str(i) + '° que isso acontece!')
'''
Aqui eu faria outra coisa
'''
i += 1
print('Essa é a ' + str(i) + '° que isso acontece!')
Funções

'''
Vamos então guardar esse trecho de código que está se repetindo em uma função.
Para criar uma função, basta usar a palavra reservada def.
'''
i = 0
# Criando a função
def imprimir():
print('Essa é a ' + str(i) + '° que isso acontece!')
'''
Aqui seria um trecho de código, onde faço algo
'''
i += 1
# Executando a função
imprimir()
'''
Aqui eu faria outra coisa
'''
i += 1
imprimir()
Parâmetros

'''
Uma função pode receber parâmetros. Assim, ela pode ter um comportamento
mais dinâmico. Pois ela pode se comportar de formas diferentes dependendo
dos valores dos parâmetros passados.
Vamos criar uma função para calcular um expoente de um número
'''
# As regras de nomenclatura de variáveis, também se aplicam a funções
def potência(base, expoente):
print(str(base**expoente))
'''
Chamando, os valores devem ser dados na mesma ordem em que os parâmetros
foram definidos na função. Chamamos isso de passagem de parâmetros
posicional
'''
# base primeiro, depois o expoente
potência(3, 4) # 81
'''
Contudo, no Python, existe outra passagem de parâmetros. Assim, eu
posso mudar a ordem da passagem, utilizando o nome dos parâmetros,
para atribui lhes valor.
'''
potência(expoente=4, base=3) # 81
# Em Python, eu posso dar valores padrões para os parâmetros
def potência(base, expoente=2):
print(str(base**expoente))
# Assim, eu posso omitir o expoente se eu quiser
potência(3) # 9
Return

'''
Até agora, estamos pedindo para a função manipular os valores que
passamos e fazer algo para gente o resultado dessa manipulação.
Por exemplo, imprimir esse resultado. Mas e se quiséssemos que ela
apenas manipule o valor que passamos e nos deixe decidir o que faremos
com o resultado dessa manipulação? Eu posso ao término de uma função,
solicitar que ela me der um retorno. Para isso, existe o return
'''
# Definindo a função que me retorna algo
def potência(base, expoente=2):
resultado = base**expoente
return resultado
# Chamando a função e guardando o retorno dela em uma variável
x = potência(3, 5)
print(str(x))
'''
Na verdade, uma função sempre me retorna algo. Quando, eu não defino
o return, ela me retorna None.
'''Tratamento de Exceções

Exceções

# Vamos solicitar que o usuário digite um número inteiro...
numero = int(input('Digite um número inteiro inteiro: '))
# O que acontece se ele digita outra coisa?
ValueError: invalid literal for int() with base 10: 'outracoisa'
# E agora? Quem poderá nos salvar?
# Isso é o que chamamos de exceção. Algo que não deveria ter acontecido.
# Podemos tratar isso com o uso do try/except.
try:
numero = int(input('Digite um número inteiro: '))
except:
print("Algo deu errado! Você tem certeza que digitou um inteiro?")
# Dentro do try fica o nosso código que é passível de exceção.
# Se houver exceção, except entra em ação. No except tratamos a exceção.Capturando o tipo de Exceção

# É possível tratar exceções específicas
numero = int(input('Digite um número inteiro inteiro: '))
# Se algo diferente de um inteiro for digitado, dará uma exceção
# de ValueError. Podemos criar um tratamento específico para ela.
try:
numero = int(input('Digite um número inteiro: '))
except ValueError:
print("Você não digitou um número inteiro!")
# Ainda podemos tratar mais de uma exceção, encadeando excepts
try:
numero = int(input('Digite um número inteiro: '))
except ValueError:
print("Você não digitou um número inteiro!")
except Exception:
print("Algo estranho aconteceu! Nos desculpe.")Else (de novo)

# É possível definir um bloco que deve ser executado.
# Caso não aconteça a exceção. Para isso, usamos o else.
try:
numero = int(input('Digite um número inteiro: '))
except ValueError:
print("Você não digitou um número inteiro!")
else:
print("O quadrado do número digitado é: " str(numero**2))Finally

# Finally é um bloco que sempre vai ser executando, independente
# de haver exceção ou não.
try:
numero = int(input('Digite um número inteiro: '))
except ValueError:
print("Você não digitou um número inteiro!")
else:
print("O quadrado do número digitado é: " + str(numero**2))
finally:
print("Obrigado. Até mais!")Módulos

Módulos

'''
Um módulo é apenas um arquivo de código Python. Por exemplo, imagine
o arquivo trigonometria.py, ele pode ser um módulo para cálculos
trigonométricos. E podemos reutiliza-lo em outros programas
'''
# Para importar o módulo trigonometria, basta importamos assim...
import trigonometria
# Pronto, o módulo foi importado. O nome do módulo é o nome do arquivo
# Sem a extensão .py
Agora podemos chamar funções desse módulo
trigonometria.seno(180)
# Eu posso dar um 'apelido' ao importar o módulo, usando o as
import trigonometria as tri
trig.seno(180)
# Eu posso pegar apenas algumas partes de um módulo
from trigonometria import seno
seno(180)
# Ou...
from trigonometria import seno as s
s(180)
# Ou...
from trigonometria import seno, cossenoCurso de Python - 4° Aula (PyLadies Fortaleza)
By Wilmerson da Silva
Curso de Python - 4° Aula (PyLadies Fortaleza)
- 612