Este conteúdo faz parte do livro “Introdução à Programação para Bioinformática com Biopython“. Você pode adquirir a versão impressa desse livro aqui ou a versão para Kindle aqui. Para nos citar, consulte este link.
Em programação, uma função é uma sequência definida de instruções ou comandos, que realiza uma tarefa específica. Essa definição lhe parece familiar? Espero que sim! Até agora vimos diversas funções pré-definidas pelo Python, como por exemplo, print, open ou str.
Neste capítulo abordaremos como definir nossas próprias funções.
Definindo funções
Para definir uma função deve-se seguir a sintaxe:
def nome_da_funcao(parametros):
comandos
Como por exemplo, vamos criar uma função que imprime uma mensagem na tela:
def imprimir_mensagem():
print("Hello, World!")
Entretanto, se você executar o comando acima nada irá acontecer. Isso acontece porque funções devem ser “chamadas” para que sejam executadas. Veja:
def imprimir_mensagem():
print("Hello, World!")
# Chamando a funcao imprimir_mensagem()
imprimir_mensagem()
A grande vantagem em se usar funções é que se pode defini-las no início do código e executá-las quantas vezes for necessário. Podemos ainda inserir parâmetros para personalizá-la.
def imprimir_mensagem(pessoa):
print("Hello, %s!" %pessoa)
# Chamando a funcao imprimir_mensagem()
imprimir_mensagem("Jose")
# Hello, Jose!
imprimir_mensagem("World")
# Hello, World!
No exemplo acima, a função imprimir_mensagem( ) recebe um parâmetro chamado pessoa e imprime uma mensagem personalizada com o conteúdo enviado durante sua chamada. Ao chamar a função imprimir_mensagem é enviado um argumento no formato string.
Você ainda pode enviar uma lista como argumento para uma função:
def imprimir_mensagem(pessoas):
for pessoa in pessoas:
print("Hello, %s!" %pessoa)
# Lista de individuos
individuos = ["Jose","Maria","Luis","Carlos", \
"Pedro","Raquel","Sara"]
# Chamando a funcao imprimir_mensagem()
imprimir_mensagem(individuos)
Funções são bastante úteis para organização de código. Se uma determinada tarefa em seu código se repete diversas vezes, considere reescrevê-la inserindo os trechos repetidos em uma única função, que será chamada quando necessário. Parâmetros e variáveis presentes em funções são válidos apenas localmente, ou seja, podem ser executados apenas dentro da função.
Podemos ainda receber o resultado do processamento de uma função e atribuí-lo a uma variável.
def quadrado(valor):
return valor*valor
a = 10
qdo = quadrado(a)
print(qdo)
# imprimira o valor 100
No exemplo a seguir utilizaremos funções para calcular o fatorial de um número:
def fatorial(n):
if n == 1:
return 1
else:
return n*fatorial(n-1)
n = 10
print("FATORIAL ",n," = ", fatorial(n))
Funções com argumentos default
Python permite a definição de valores default (padrão) para argumentos. Esses valores serão adotados caso outros valores não sejam informados durante a chamada da função. Segue abaixo um exemplo desse tipo de declaração de função:
def minhaFuncao(arg1, arg2="Segundo argumento"):
Abaixo, temos como exemplo uma função que salva o conteúdo de um dicionário em um arquivo:
def salvaMapa(mapa, nomeArquivo = 'temporario.txt'):
''' O dicionário mapa será salvo no
arquivo temporario.txt '''
arq = open(nomeArquivo,'w')
for k in mapa.keys():
linha = 'Coluna: '+ str(k)+' Valor: '+str(mapa[k])
arq.write(linha + '\n')
arq.close()
return None
mp = {'A': 'ALA', 'R': 'ARG', 'N':'ASN', 'D':'ASP', 'C':'CYS'}
salvaMapa(mp,'aminoacidos.txt')
No exemplo acima, caso o usuário não informe um nome para o arquivo durante a chamada da função, o arquivo será criado com o nome “temporario.txt”.
Funções com número indefinido de argumentos
Python permite a criação de funções com número variável de argumentos. Para isso, utiliza-se o caractere “*” antes da declaração do parâmetro. Qualquer quantidade excedente de argumentos enviada será associada ao ultimo elemento em forma de tupla. Segue abaixo um exemplo desse tipo de declaração:
def myFunc(arg1, *arg2):
Agora, vamos criar uma função que calcula a mediana de qualquer sequência de valores passados:
def mediana(*valores):
tam = len(valores)
if tam == 0:
return None
elif tam%2 == 0:
ctr = tam/2
return (valores[ctr] + valores[ctr -1]) / 2
else:
return valores[tam/2]
mediana(2,5,6,7,9,12,20)
# retornaria o valor 7
mediana(2,5,6,7,9,12,20,52)
# retornaria o valor 8
No exemplo a seguir faremos uma função que soma de vários números.
def soma(*valores):
tam = len(valores)
soma = 0
for i in range(tam):
soma = soma + valores[i]
return soma
print(soma(2,2,3,5))
Funções com número indefinido de chaves
Por fim, em Python as funções podem receber qualquer número de argumentos com valores e chaves. Para isso, basta usar no argumento da função os caracteres “**”. Os argumentos excedentes serão enviados para função como dicionários. Segue abaixo, um exemplo desse tipo de declaração:
def myFunc(arg1,**arg2):
Abaixo um exemplo de uso:
def imprimeFormatado(*val,**kvals):
print(val)
print(kvals)
imprimeFormatado('Autores',4, ano = 2015, \
inicio = ”janeiro”, fim = ”dezembro”)
# ('Autores',4)
# {'ano': 2015, 'inicio':'janeiro', 'fim' :'dezembro'}
Nesse exemplo os argumentos enviados “sem nome” (“Autores”, 4) serão atribuídos ao parâmetro val e os passados “com nome” (ano = 2015, inicio = ”janeiro” e fim = ”dezembro”) serão atribuídos a kvals.
Quer aprender mais? Conheça nossos cursos profissionalizantes à partir de R$19,99:
Capítulo 1
Introdução ao Python
Capítulo 2
Comandos condicionais
Capítulo 3
Laços de repetição
Capítulo 4
Trabalhando com strings
Capítulo 5
Listas
Capítulo 6
Manipulando arquivos
Capítulo 7
Funções
Capítulo 8
Princípios da orientação a objetos
Capítulo 9
Introdução ao Biopython
Capítulo 10
Sequências
Capítulo 11
BLAST
Capítulo 12
PDB
Capítulo 13
Visualização de dados em Python
Capítulo 14
Outras coisas interessantes que se pode fazer com Biopython
Capítulo 15
Hierarquia do Biopython