Funções


Hoje vou falar um pouco do que aprendi sobre as funções e parâmetros no Python.

Esta é uma parte da definição de “Função” no wikipedia, a que mais intereça:

Função: consiste em uma porção de código que resolve um problema muito específico, parte de um problema maior (a aplicação final)

Bom, vamos ver o que temos no nosso código de estudo:

#/usr/bin/python
# -*- coding: cp1252 -*-
"""
Script de testes de funções e parâmetros em python 2.6
"""
import sys
print sys.argv #imprime os parametros recebidos na chamada do script

a = 'd'
def fvar1():
 global a                #esta variável é global
 a = 'defora'
 print a

print a

def fvar2():
 a = 'dedentro'          #esta variável é local
 print a

def flista():
 '''
 Explicação do que a função faz
 '''
 return [2,3]

def f1(arg1):               #declaracao simples de 1 parametro
 print 'f1',arg1

def f11(arg1, arg2):        #declaracao simples, com + de 1 parametro
 print 'f11', arg1, arg2

def f2(*args):              #declaracao com parametros opcionais
 print 'f2', args, type(args)

def f3(t,**args):           #declaracao com parametros nomeados opcionais
 print 'f3', t, args
 if args:
 print type(args)
 for arg in args.keys():
 print "%s: %s" % (arg, args[arg])

def f4(a=0, b=[], c='teste', m={}): #declaracao de padrões para valores de parametros
 m[c] = a
 print 'f4', a, b, c
 return m

fvar1()                     #testes do escopo
fvar2()

x,y = flista()              #exemplo de retorno multiplo
print x,y

f1(1)                       #chamando com 1 parametro apenas
f11(1,2)                    #chamando na ordem de declaracao dos parametros
f11(arg2=3,arg1=2)          #chamando com parametros nomeados

f2(1,2,3)                   #pode passar quantos parametros quiser
f2(1,2,'teste','8u8')       #pode passar quantos parametros quiser
f2(1)                       #pode passar quantos parametros quiser

f3(1)
f3(t=1,
 produtor='Sergio',
 outro='teste')           #chamando com parametros nomeados opcionais

f4()                        #chamada sem nenhum parametro informado
f4(a=5, b=[9,0,8])          #chamada com alguns parametros nomeados
f4(c='fim')
print f4(5)                 #chamada com apenas um parametro, na ordem declarada

def total(arg1, arg2='nada', *arg3, **kwargs):
 print arg1, arg2, arg3, kwargs

total('f', 'tudo', 1,2,3,4, maisum='teste', maisoutro='teste2')

Nas linhas 6 e 7 vemos o que é necessário para se ter acesso aos parâmetros recebidos pelo script. Simples, sys.argv é uma lista que contém como primeiro item o nome do arquivo executado. No caso do Linux podemos também ter um link simbólico para o arquivo em questão, sendo apresentado, neste caso, o nome do link, e não do arquivo real.

Para definir uma função ou método em python utilizamos a palavra chave ‘def’, seguido do nome da função e dentro de parênteses a definição dos parâmetros. O para o python não difere função de métodos, pois todos podem retornar valor, bastando acrescentar um “return”.

Um pouco de escopo: das linhas 8 a 20 temos um exemplo de utilização de variável global e local. Para que a função ‘fvar1′ acesse a variável declarada fora da mesma, é necessário acrescentar a instrução “global” seguido do nome da variável a se utilizar.

As funções do python podem retornar quaisquer tipos de objetos, porém, é altamente recomendado que se siga determine um tipo de retorno para cada função, a fim de não causar erros indesejados na sua aplicação/script. Podemos ver um exemplo de retorno de lista na função ‘flista’, e mais abaixo podemos ver um exemplo de como receber estes valores. E nesta mesma função, podemos ver um exemplo do que chamamos de “docstring”, que é a documentação básica que devemos criar, colocando como primeiro item da função, antes de todo o código, uma string literal ( e não um comentário, como em outras linguagens ) explicando o que for necessário.

Agora alguns exemplos de recebimentos e passagem de parâmetros:
as funções ‘f1′ e ‘f11′ são exemplos simples e comuns de declaração e recebimento de parâmetros.

A função ‘f2′ mosta o modo de como utilizarmos parãmetros opcionais em python. Utilizando-se do asterisco no inicio do nome da variavel, e sendo obrigatoriamente o ultimo item na declaração da função, esta variável funcionará como ‘sys.argv’ funciona, porém retornando uma tupla com os valores passados à função.

A função ‘f3′ nos exemplifica como receber um dicionário com chaves e valores, que foram passados “nomeadamente” como parâmetros para a função ( veja o exemplo da chamada mais abaixo, no script ). Na realidade eu não sei bem ainda qual a principal utilização deste método de passagem de parâmetros, mas é uma boa funcionalidade do Python. ( se você tem alguma dica sobre isto, por favor, comente ! ).

E por último, mas não menos importante, um exemplo de como definir valores default para cada parâmetro. É simples, bastando colocar uma atribuição para cada parâmetro que desejar. Também tem uma ordem: primeiro parametros normais, depois os com valor default, e depois os opcionais.

Ah, uma questão interessante de se observer é uma pegadinha que acontece neste momento, quando definimos como valor default um valor mutável, veja aqui

Mais no final do script temos as chamadas variadas, exemplificando cada um dos meios de chamar e passar parâmetros para uma função.

E bem no final, tem uma função chamada ‘tudo’ que mostra como podemos trabalhar com todas estas opções juntas, porém não aconselho, por deixar o código mais confuso e fácil de se cometer um erro.

Concluindo, vemos que o python sempre temos muitas possibilidades de fazer várias tarefas, mas nao quer dizer que temos que utilizar todas elas. Eu por exemplo gosto de codigos mais simplificados e claros, porem as vezes eh necessario conhcecermos todas as formas de se trabalhar com a linguagem para poder fazer algum tunning no codigo ou montar uma funcao para uma necessidade estranha específica no nosso software !

About these ads

Um comentário sobre “Funções

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s