• Home »
  • Artigos »
  • Curso de programação em Python Lição 11 – Mais sobre funções

Curso de programação em Python Lição 11 – Mais sobre funções

Bem vindos á décima primeira aula do curso de programação em PythonEste artigo faz parte do curso de programação em Python do INFOmoz. Para acessar outras aulas do curso, por favor visite o índice do curso de programação em Python .

OBJECTIVOS DA AULA

  • Função com parámtros indefinidos
  • Conceito de Doc-Strings(Comentários de funções)
  • Funções com parámetros predefinidos(default)
  • Funções Predefinidas(Built-ins)
  • Funções e seqüências
  • Valor de retorno e Side-effects
  • Vamos nesta aula estudar mais alguns conceitos sobre funções em Python.

Funções com parâmetros indefinidos

Na aula passada falamos de parâmetros de entrada de funções, e definimos algumas funções com parámetros. Se não se recorda, aqui vai mais um exemplo de função, que possui dois argumentos de entrada(base,expoente) e retorna o valor da operação: base elevado ao expoente:

def potencia(base,expoente):    potencia=1    if expoente>=0:        while expoente>0:            potencia=potencia*base            expoente=expoente-1    else:        return 0 # Neste caso a nossa função reclama    return potencia

Esta função também mostra que é possível usar mais de uma instrução return, desde que exista uma estrutura condicional, como por exemplo um if, que garante que apenas uma das instruções return será executada.Mas voltando aos parámetros, imagine que pretendemos criar uma função para resolver o seguinte problema: Calcular a soma de todos os números introduzidos pelo utilizador. Mas nós nem sequer sabemos quantos números o utilizador vai introduzir!Para resolver este tipo de caso, existe em Python uma forma de declarar uma função com um número indeterminado de parámetros, fazendo o seguinte:

def (*):

Ou num exemplo mais concreto:

def minha_funcao(*parametro):

Aqui, os parámetros introduzidos são “recolhidos” pela variável parametro como sendo uma tupla. Veja o exemplo a seguir:

def nome(*nomes):    return nomes    print nome(“Carla”,”Elisio”,”António”,”João”,”Leonardo”)

Experimente rodar o programa acima para ver o resultado.Então como Python considera os parámetros introduzidos como parámetros de uma única sequência(tupla neste caso), e como nós já temos algumas noções de manipulação de tuplas em Python( aula 5), o caso fica um pouco mais simples né?Mas ok! aqui vai mais um exemplo, que é resposta ao problema anterior:

def somatodos(*valores):    soma=0    for s in valores:        soma=soma+s    return soma

Agora você deve estar pensando: As sequências em Python não dependem do tipo de dado! até ai tudo bem. Mas e se chamassemos a função soma com os seguintes parámetros:

somatodos(23,33,44,53,”Python”)

Como será que ele efectuaria a soma?Ali o programa daria em erro. Mas você, com as técnicas que aprendeu ao longo do curso, pode arranjar formas de contornar este pequeno problema. Aqui vai uma dica:

def somatodos(*valores):    soma=0    for s in valores:        try:            soma=soma+s        except:            print(s)    return soma

Comentários em funções (Doc Strings)

Como esquecer é humano, é normal que depois de você criar milhares de funções(vamos precisar para fazer o nosso Half –Life, GTA e Need For Speed Pro Street!!!), você se esqueça para que servem algumas delas. Mas o que fazer com estas funções? jogar fora? custaram muito esforço para criar!!!Ah! Sim! há uma solução: escrever em algum sitio para que serve cada função. Mas onde vamos escrever? já pensou em criar um documento no word tipo:Função x faz y, função y faz z,etc…Seria um absurdo né? O ideal seria escrever dentro da própria função para quê ela serve e depois fazer a ela esta pergunta.Em Python é possivel fazer isso usando “Doc-Strings”, que são pequenos comentários que são colocados dentro das funções para explicar para quê ela serve. Lembre-se também que como Python é Open-Source, é comun pessoas disponibilizarem código-fonte de funções, para que os outros possam utilizar, e o que você vai fazer com uma função que nem sequer sabe o que faz?Veja o exemplo de uma função com “Doc String”:

def funcaodocumentada():“””Esta e a documentacao da nossa funcao”””#Para visualizar a “Doc String” de uma função fazemos o seguinte: print .__doc__ #ou para o exemplo acima: print funcaodocumentada.__doc__

Funções com parámetros predefinidos(default)

É também possivel(em Python), referenciar um valor default num parámetro. Assim, se o utilizador não fornecer nenhum valor para aquele parámetro, a função irá utiliza aquele valor default.Veja no exemplo a seguir:

def dados(nome=”Leonardo”,provincia=”Manica”):    print(nome, “e natural de ”,provincia)#Tarefa: Crie um programa que use a função acima. Use as formas a seguir #para invocar a função:dados(“Elisio”,”Maputo”)dados(“Elisio”)
def dados(nome=”Leonardo”,residencia=”Minha casa”,idade=19):    print(nome," vive em ",residencia," e tem ",idade," anos")#Agora invoque a função anterior com os seguintes parámetros: dados(“Elisio”,18)

Houve um pequeno problema né? O problema é porque como Python recolhe os valores passados na sequência dos parámetros, o segundo valor foi atribuido ao segundo parámetro, neste caso, a residencia. Para corrigir isto, ao usar apenas alguns valores default, deve-se indicar quais não vamos usar. Para o caso do exemplo anterior o mais correcto seria:

dados(“Elisio”,idade=18) #Pratica isto que logo você pega jeito

Funções Pre-definidas(Built-in functions)

O Python possui muitas funções pré-definidas, algumas delas você usou, sem mesmo saber que era uma função. Além disso, já dissemos que Python era uma linguagem de programação modular, então a cada módulo novo, temos outras funções pré-definidas.O objectivo desta parte da aula é mostrar para você( ou lembrar) algumas funções pré-definidas do Python. A medida que entrarmos para o estudo de outros módulos(Pygame, por exemplo), veremos outras funções e assim por diante.

Funções e sequências

Imagine agora que temos uma sequência(Já sabes o que são né? se não sabe reveja estas duas aluas: aula sobre strings em Python e aula sobre listas tuplas e dicionários em Python), e queremos aplicar uma função sobre cada termo da sequência! Podemos fazer isso usando ciclos for ou while, mas como Python é uma linguagem bem projectada, ela possui meios bem mais práticos de fazer isso. Um desses meios é o uso da função map(funcao,sequencia), que aplica a função dada a cada um dos termos da sequência dada. Veja o exemplo:

def quadrado(x):    return x**2lista=[2,3,4]quadrados=map(quadrado,lista)print(quadrados)

Outra função importante sobre sequências é a reduce, que toma valores um a um da sequência dada para os parámetros da função. Como se segue:

x=reduce(potencia,[2,3,4,5,6,7,8])

Mas o que acontece no programa acima?Muito simples. A função primeiro toma como valor do parámetro x o primeiro valor da lista(1 neste caso) e como valor do parámetro y o segundo. Efectua a soma especificada na função (1+2=3).Este 3 passa a ser o próximo valor do parámetro x e o valor do parámetro y e o próximo da sequência e assim sucessivamente.

List Comprehensions

List Comprehensions é uma outra forma muito interessante de trabalhar com funções-sequências em Python. Este recurso permite gerar listas a partir de funções simples. Usa-se da seguinte forma:

[x**2 for x in [1,2,3]]

Assim estamos fazendo um programa criar uma lista de quadrados a partir da lista dada.Se quisessemos obter uma tupla (valor,quadrado) fariamos o seguinte:

[(x,x**2) for x in [1,2,3]]

Este recurso torna-se mais interessantes para problemas não algebricos veja só:

[“%ss” %plural for plural in [“macaco”,”coelho”,”cobra”,”programacao”]]

Ou então com sequência de sequências:

lista=[(1,2,3),(3,4,5)(12,34,56)][a+b+c for (a,b,c) in lista]

Vamos a mais um exemplo de uma função, que imprime um nome passado como parámetro:

def imprimenome(nome):    print(nome)

Rode este programa antes e veja o resultado.Mas, quem mandou imprimir aquele “none”? Queres saber? veja o que se segue:

Valor de retorno e side effects

Vimos na aula passada que uma função retorna um valor, e que o valor é especificado em return. Quando numa função não especificamos o valor de retorno, ela retornará um valor none, que não nos servirá para nada, já que não é de nenhum tipo. Qualquer outro valor que a função imprima,etc. não é considerado valor de retorno. Ao chamarmos o valor de retorno da função para outra operação, ele só considera o valor especificado no return. Tente fazer alguns exemplos e verás.Agora sim! já podemos entrar para outros conceitos de programação em Python, os módulos. Mas fica para a próxima aula, já que agora você deve estar cansado e louco para criar as suas funções. Só uma dica: Não se esqueça do Doc String!!!Até breve!!!

Receba nossas actualizações por email

Ver Campanhas anteriores.

(Visited 59 times, 1 visits today)
Share