Em Python podemos receber tipos arbitrários de funções de duas formas. A primeira seria usando tupla e a segunda usando dicionario.
Relembrando conceitos
Tuplas são listas de dados imutáveis. Quando o programa está em execução não podemos modificar os valores contidos nos índices da tupla, ou seja, se no inicio do programa a posição 1 da tupla armazena o dado 'programado' até o final do programa a posição 1 irá armazenar esse dado.Dicionários são listas de dados que combinam par de chave valor, ou seja, invés de associarmos indices com dados no dicionário adicionamos chaves com dados. Por exemplo:
programador = 'Guilherme'
(chave) (dado)
E para recuperarmos o dado devemos informar o nome da chave.
Simples não é mesmo? Bom vamos voltar para a ideia central do post.
Trabalhando com N parâmetros na chamada da função
Bom primeiramente vamos imaginar o seguinte cenário: "Elabore um programa que realize a somatória de N números inteiros e exiba o valor calculado".
Sabemos que vamos trabalhar com muitos parâmetros, porém, não nos foi informado quantos. Sabemos também que são números inteiros ou seja entre dicionários e tuplas qual devemos escolher? Se você falou tuplas acertou.
Para identificar que um parâmetro é uma tupla basta adicionar * antes de seu nome. Veja:
def funcao (*args):
pass
Com isso definimos uma tupla com o nome de args. Para chamar essa função basta colocar o seu nome e adicionar os números que deseja somar:
funcao (1,2,3,4,5,6,7,8,9,10)
E para compilar você deve colocar o comando python e logo após o nome do seu arquivo. Veja:
>> python arquivo.py
O que apareceu na sua tela? Exatamente nada rsrsrs!! Calma pequeno gafanhoto isso aconteceu porque não implementamos a somatória dos números. Vamos fazer isso então.
Para percorrer todos os valores de uma tupla podemos usar o comando for, que serve para percorrer um tipo de dado que seja Iterator. E por definição uma tupla é iterável. Para somar todos os dados da tupla devemos fazer:
soma = 0
for nro in args:
soma += nro
return soma
Agora podemos chamar a função e imprimir o seu retorno:
print ( funcao(1,2,3,4,5,6,7,8,9,10)) >> 55
Viu como foi simples? Então o que fizemos foi o seguinte. Montamos uma estrutura for e varremos essa estrutura pegando os itens um a um e adicionamos os seus valores na variável local chamada soma. Ao final da função retornamos o valor de soma.
Veja o código completo:
arquivo.py
def funcao(*args):
soma = 0
for nro in args:
soma += nro
return soma
print (funcao(1,2,3,4,5,6,7,8,9,10))
Agora vamos trocar de cenário: "Elabora um programa que simule uma agenda telefonica. Onde o usuário deve informar o nome e o número do contato."
Bom acho que isso não podemos resolver com tuplas correto? Bem ainda nos resta o dicionário será que ele pode nos ajudar? Se você respondeu sim ... você acertou!
Para identificar que um parâmetro é um dicionário devemos adicionar ** antes de seu nome. Veja:
def funcao (**kwargs):
pass
Com isso definimos um dicionário com o nome de kwargs. Para chamar essa função basta colocar o seu nome e adicionar os nomes e seus respectivos números (contatos):
funcao(PHP=88888888, Python=77777777, Java=21212121, C=28826718)
Como você já sabe, se executarmos o nosso arquivo nada irá ocorrer pois nada foi implementado não é mesmo? Bom então lets programar pequeno gafanhoto.
Já sabemos que o for consegue percorrer objetos que sejam iteráveis, e adivinha só ... o dicionário é iterável o///. Então o nosso código ficará assim:
arquivo.py
def funcao(**kwargs):
print ('Name \t Number ')
for contato in kwargs:
print ("\n{}\t{}".format(contato, kwargs[contato]))
funcao(PHP=88888888, Python=77777777, Java=21212121, C=28826718)
Nossa muito fácil né pessoal nem parece que em poucas linhas de código já montamos uma agenda telefônica '-'. Sério pessoal, podemos pegar esse código e mandar ele salvar em um arquivo .txt e Ulalá teremos uma agenda *-*.
Porém você deve estar muito emocionado agora, sim eu sei que está kkk. Mas e se precisarmos de uma tupla, um dicionário e mais 3 parâmetros em uma mesma função será que isso é possível?
SIM É PLENAMENTE POSSÍVEL =). VEJA:
def funcao (arg1, arg2, arg3, *args, **kwargs):
pass
Cabe aqui uma dica. A tupla deve ficar antes do dicionário e o dicionário deve ser sempre o ultimo argumento.
Pessoal o post terminou :'( ... Bons estudos e até a próxima!!!
Nenhum comentário:
Postar um comentário