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:
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 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]) >>>
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 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 >>>
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 ... >>> 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) >>>
como podemos ver, um simples * pode fazer toda a diferença!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 >>>
Boa semana a todos e até a próxima...
[Curso de Python] Funções Com Argumentos Indefinidos - Parte 1/2
28 de Julho de 2010, 0:00 - sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 183 vezes
0sem comentários ainda