Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

[Curso de Python] Funções Com Argumentos Indefinidos - Parte 1/2

28 de Julho de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui.



No último post falamos mais um pouco sobre os argumentos de uma função mas mesmo assim ainda não acabamos de cobrir todo o assunto. O Python é um linguagem muito extensa e com diversas funcionalidades. Hoje vamos ver a primeira parte de argumentos indefinidos, ou também conhecidos como *args e **kwargs.



Funções Com Argumentos Indefinidos - Parte 1/2



Como vimos, anteriormente podemos declarar funções sem argumentos, funções com argumentos fixos, e funções com argumentos não obrigatórios (valores padrões). Mas se uma função precisa levar muitos argumentos chegando a ser complicado definir todos podemos usar o recurso dos argumentos indefinidos.

Primeiramente vamos aprender a usar uma tupla como "container" de argumentos, geralmente referenciado como *args. Vale ressaltar que o nome da variável após o * pode ser qualquer outra palavra que defina o que serão os seus itens. Vamos a um exemplo:

Código:
>>> def teste_args(*args):
...     print 'args =',args
...
>>> teste_args()
args = ()
>>> teste_args(1,2,3)
args = (1, 2, 3)
>>> teste_args(1,2,3,4,5,6,7,8,9)
args = (1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> teste_args(1,2, 'abc', [9,8,7])
args = (1, 2, 'abc', [9, 8, 7])
>>>
Como podemos ver, a tupla args recebe qualquer quantidade de argumentos mantendo sua ordem para uma correta decodificação. Desta maneira podemos elaborar uma função que processe todos os argumentos por exemplo, uma função que retorne a soma de todos os argumentos:

Código:
>>> def soma(*args):
...     resultado = 0
...     for numero in args:
...         resultado = resultado + numero
...     print 'resultado =',resultado
...
>>>
>>>
>>> soma(1,2)
resultado = 3
>>> soma(1,2,3)
resultado = 6
>>> soma(1,2,3,4,5,6,7,8,9,10)
resultado = 55
>>>
Uma vez que temos infinitos argumentos possíveis, pode vir a ser necessário utilizar uma lista/tupla para armazenar todos os argumentos antes de passa-los para a função. Vamos supor que nosso programa levantou uma lista de números (por exemplo, passado pelo usuário) e irá passá-los para a função de soma. Isso implica em um pequeno detalhe. Vamos ver o que ocorreria se passarmos a lista/tupla normalmente:

Código:
>>> def teste(*args):
...     print 'args =',args
...     n = 0
...     for arg in args:
...         print 'arg',n,'=',arg
...
>>> teste(1,2,3,4)
args = (1, 2, 3, 4)
arg 0 = 1
arg 0 = 2
arg 0 = 3
arg 0 = 4
>>> l = (1,2,3,4)
>>> teste(l)
args = ((1, 2, 3, 4),)
arg 0 = (1, 2, 3, 4)
>>>
Podemos ver que o *args "envelopa" a lista l como sendo o seu primeiro elemento. ao tentar realizar essa soma iríamos obter um erro. Para utilizar a funcionalidade do *args e ao mesmo tempo passar uma lista/tupla, precisamos "desempacotá-lo":

Código:
>>> def teste(*args):
...     print 'args =',args
...     n = 0
...     for arg in args:
...         print 'arg',n,'=',arg
...
>>> def soma(*args):
...     resultado = 0
...     for numero in args:
...         resultado = resultado + numero
...     print 'resultado =',resultado
...
>>> l = (1,2,3)
>>> teste(*l)
args = (1, 2, 3)
arg 0 = 1
arg 0 = 2
arg 0 = 3
>>>
>>> soma(*l)
resultado = 6
>>>
como podemos ver, um simples * pode fazer toda a diferença!

Boa semana a todos e até a próxima...


[Curso de Python] Funções com Argumentos e Valores Padrões

21 de Julho de 2010, 0:00, por Software Livre Brasil - 0sem comentários ainda

Antes de prosseguir leia os artigos anteriores aqui.


No último post sobre funções com argumentos nomeados, eu mostrei como referenciar argumentos utilizando como base o nome designado a este argumento. Hoje vamos ver como utilizar valores padrões, ou pré-definidos, em um argumento.


Funções com Argumentos e Valores Padrões


Muitas vezes você precisa criar uma função quase idêntica a outra, a única diferença é que uma recebe argumentos enquanto a outra não. O Python nos oferece um recurso interessante para evitar a criar de duas funções com comportamentos similares. Os valores padrões fazem um argumento se tornar opcional. Vamos a um exemplo prático, precisamos de uma função que incremente um numero. Caso não especificado um "valor de incremento", o número será incrementado com o "valor de incremento" igual a um. Ou seja, o comportamento da função deve ser o seguinte:

Código:
>>> incrementa(10)
11
>>> incrementa(2)
3
>>> incrementa(4,2)
6
>>> incrementa(7,10)
17
Em resumo essa função deve somar dois numeros. Como podemos ver o segundo argumento é opcional, caso informado o primeiro número deve ser somado ao segundo, caso não seja informado o segundo número, o primeiro número deve ser somando a um valor fixo que, conforme especificado, é 1. Vamos ao código:

Código PHP:
def incrementa(num1num2=1):
    return 
num1+num2 
O valor padrão é definido na declaração da função. Ao declarar um argumento com um valor inicial (num=2) ele se torna opcional, podendo ou não ser especificado. Vamos a outro exemplo: Criar uma função que conte o numero de caracteres que uma frase tem. O argumento opcional é uma letra e, caso seja especificado, a função deve contar as ocorrências dessa letra:
Código PHP:
def conta_caracteres(fraseletra=None):
    if 
letra is None:
        
cont 0
        
for l in frase:
            
cont cont 1
    
else:
        
cont 0
        
for l in frase:
            if 
== letra:
                
cont cont 1
    
return cont 
Como podemos ver, eu iniciei o argumento letra como None. Ao inciar a função verifico se o valor padrão de letra foi alterado (if letra is None), caso negativo, eu conto o número de letras na frase. Caso a letra tenha sido especificado (else) eu conto o número de ocorrências da letra. Antes que alguém fale, eu sei que existem funções prontas que fazem isso, eu estou utilizando apenas como exemplo. Abaixo a execução desse código:
Código:
>>> conta_caracteres('esta e uma frase')
16
>>> conta_caracteres('esta e uma frase', 'a')
3
>>> conta_caracteres('esta e uma frase', 'f')
1
>>> conta_caracteres('esta e uma frase', ' ')
3
>>>
Boa semana a todos e até a próxima...


Tags deste artigo: python linux arch programação desenvolvimento vim