Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] Funções que Retornam Valores - Parte 1/2

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui



Olá pessoal! Revendo algumas das nossas últimas aulas sobre funções percebi que havia esquecido de abordar o assunto de funções que retornam valores. Então vamos voltar um pouco nos conceitos mais avançados de funções e vamos ver um conceito mais básico, o "comando" return.



Funções que Retornam Valores - Parte 1/2



Muitas vezes criamos funções para simplificar e modularizar o nosso código. Muitas dessas organizações consistem em funções que realizam algum processamento que pode vir a ser repetido diversas vezes. O "comando" return torna possível que uma função retorne um valor. Esse valor pode ser útil para uma outra parte do programa e pode ser guardado em uma variável. Em Python, não há restrições quanto ao tipo do valor a ser retornado. Vamos a um exemplo básico, uma função que diz se o argumento é uma string ou não. Nesse exemplo, vou utilizar a função type, para quem não lembra como ela funciona vale uma revisão na seguinte aula: [Curso de Python] Comparando os tipos de variáveis

Código :
>>> def eh_str(arg):
...     if type(arg) is str:
...         return True
...     return False
...
>>>
>>> def eh_str2(arg):
...     if type(arg) is str:
...         print 'eh str'
...     print 'nao eh str'
...
>>>
>>> eh_str(12)
False
>>> eh_str('teste')
True
>>> eh_str([1,2])
False
>>>
>>> eh_str2(12)
nao eh str
>>> eh_str2('teste')
eh str
nao eh str
>>> eh_str2([1,2])
nao eh str
>>>
Nesse exemplo, vemos como o return funciona de forma diferente de um "comando" comum. na função eh_str2 utilizamos o print para mostrar o fluxo do programa. Quando o programa entra no if ele imprime 'eh str', depois sai do if e executa o print 'nao eh str'. Já quando utilizamos o return na função eh_str vemos que quando ele entra no if ele nunca sai, pois o comando return quebra toda a execução da função e retorna para o ponto onde a função foi chamada. Vamos ver agora o mesmo exemplo mas com o valor retornado sendo armazenado em uma variável:

Código :
>>> def eh_str(arg):
...     if type(arg) is str:
...         return True
...     return False
...
>>>
>>> def eh_str2(arg):
...     if type(arg) is str:
...         print 'eh str'
...     print 'nao eh str'
...
>>>
>>> ret = eh_str('teste')
>>> print ret,type(ret)
True <type 'bool'>
>>> ret = eh_str2('teste')
eh str
nao eh str
>>> print ret,type(ret)
None <type 'NoneType'>
>>>
Podemos notar que o return "envia" de volta uma variável, nesse caso o booleano True. No caso da função eh_str2, como não retornamos nenhuma variável, por padrão é retornado a variável None, o valor nulo utilizado pelo Python.


Nesse próximo exemplo, vou utilizar o operador in, para quem não lembra como ele funciona basta consultar essa aula: [Curso de Python] Condições com o operador in


Código :
# Este programa verifica se o texto 
# informada possui apenas letras e espaços
 
# Esta variável possui todos os caracteres válidos
CARACTERES_VALIDOS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVwXYZ '
 
def valida_texto(texto):
    for letra in texto:
        if letra not in CARACTERES_VALIDOS:
            return False
    return True
 
while True:
    texto = raw_input('Informe um texto (para sair digite "sair"): ')
    if texto == 'sair':
        break
    retorno = valida_texto(texto)
    if retorno:
        print 'Texto validado'
    else:
        print 'Texto inválido!'
print 'Até a próxima...'
Como podemos ver, no código a função valida texto itera sobre cada letra do texto informado verificando se ela está na variável CARACTERES_VALIDOS. Caso não esteja (if letra not in CARACTERES_VALIDOS) ele retorna o valor falso. O comando return automaticamente sai da função, cancelando toda sua execução, dessa forma ele não itera sobre o restante das letras.

Caso ele não entre no if nenhuma vez durante a iteração temos a certeza que todas as letras são válidas, com isso retornamos o valor True. No loop while recebemos o texto com a função raw_input e verificamos se foi digitado 'sair. Caso positivo, saímos do loop com o comando break. Em seguida chamamos a função valida_texto e armazenamos seu retorno na variável 'retorno'. Dependendo do retorno imprimimos uma mensagem para o usuário e no final emitimos a mensagem de finalização do programa. Vamos ver um exemplo de execução:

Código :
Informe um texto (para sair digite "sair"): este é um teste
Texto inválido!
Informe um texto (para sair digite "sair"): este eh 1 teste
Texto inválido!
Informe um texto (para sair digite "sair"): este eh um teste
Texto validado
Informe um texto (para sair digite "sair"): sair
Até a próxima...
Nos testes vemos que as frases com acentos, números e qualquer outro caractere que não sejam as letras de a-z e A-Z, será mostrada a mensagem "Texto inválido!".

Até a próxima...

Comentários

  1. Avatar de lord4rk
    Olá Magnun!!
    Bem interessante o comportamento do return, pensava eu que ele só servia como um print, mas para atribuir um objeto a uma variável!!
    Vivendo e aprendendo!!
    Good Job!!
    []'s
    Jr
  2. Avatar de Magnun
    Olá lord4ark,

    Fazia tempo que você não aparecia! O return é fundamental para a programação estruturada, ele cai um pouco em desuso quando utilizamos orientação a objeto, mas é imprescindível entender seu uso pois, vez ou outra, será necessário utilizá-lo.

    Até mais...
  3. Avatar de victoreng
    Eai Magnum,
    esse if que verifica a variável retorno não é necessário uma condição, é isso mesmo?
    if retorno:
    print 'Texto validado'
    else:
    print 'Texto inválido!'

    eu entendi que como é variável boolean...ele já entende automaticamente e executa o True para True e Else para False...sem precisar colocar um retorno = True

    é isso mesmo?

    Abraços
  4. Avatar de Magnun
    Exatamente. Se você não definir uma commparação (por exemplo, retorno == True) o Pyhton "tenta entender a variável como um valor booleano". Ele faz isso chamando a função bool(). Cuidado para usar isso é bom ver o comportamento do Python pois existem peculiaridades. Exemplos:
    Código :
    >>> bool(None)
    False
    >>> bool('asdasd')
    True
    >>> bool('')
    False
    >>> bool(1)
    True
    >>> bool(0)
    False
    >>> bool(-1)
    True
    >>>

    Até mais...
  5. Avatar de fabraga
    E vamos que vamos...

+ Enviar Comentário