[Curso de Python] Funções Com Argumentos Indefinidos - Parte 2/2
por
em 04-08-2010 às 11:08 (8100 Visualizações)
Antes de prosseguir leia os artigos anteriores aqui.
No último post falamos um pouco sobre argumentos indefinidos que se utilizam do * para receber um vetor de tamanho indefinido como argumento. Hoje vamos ver como utilizar dois asteriscos e sua funcionalidade.
Funções Com Argumentos Indefinidos - Parte 2/2
Anteriormente vimos como usar uma tupla para receber argumentos indefinidos em uma função. Essa abordagem traz um pequeno incômodo, referenciar os argumentos passados através de índices. Hoje vamos ver uma outra forma de receber argumentos porém referenciando-os pelo nome. A referência por nome ou palavras-chave (keywords) é mais intuitiva porém causa mais consumo de memória pois é necessário criar um dicionário para armazenar os argumentos. Um dicionário vazio é 5 vezes maior que uma tupla vazia. Geralmente esse argumento da função é referenciado por **kwargs, um mnemônico de "Keyword Arguments". Vamos ver um exemplo:
Como podemos ver, devemos utilizar 'identificadores' para os argumentos. Esses 'identificadores' são convertidos nas 'chaves' do dicionário.Código :>>> def teste_kwargs(*kwargs): ... print 'kwargs =',kwargs ... >>> teste_kwargs() kwargs = {} >>> teste_kwargs(arg1=1, arg2=2, arg3=3) kwargs = {'arg1':1, 'arg2':2, 'arg3':3) >>> teste_kwargs(arg1=1, arg2=(2,3,4), arg3='teste') kwargs = {'arg1': 1, 'arg2': (2, 3, 4), 'arg3': 'teste'} >>>
Um artifício muito poderoso é a combinação de *args com o **kwargs, o que nos traz a possibilidade de utilizar inúmeros argumentos nomeados e não nomeados. Segue um exemplo:
Como podemos ver, utilizando essa combinação, é possível passar apenas argumentos nomeados, apenas argumentos não nomeados ou ambos, respeitando a "etiqueta" que diz que os argumentos não nomeados devem sempre vir antes dos argumentos nomeados.Código :>>> def teste_kwargs(*args, **kwargs): ... print 'args =',args ... print 'kwargs =',kwargs ... >>> teste_kwargs(1, 2, 3, x='a', y='b', z='c'): args = (1, 2, 3) kwargs = {'y': 'b', 'x': 'a', 'z': 'c'} >>> teste_kwargs('a', 'b', 'c') args = ('a', 'b', 'c') kwargs = {} >>> teste_kwargs(teste1=1, teste2=2, teste3=3) args = () kwargs = {'teste1': 1, 'teste3': 3, 'teste2': 2} >>>
Boa semana a todos e até a próxima...
Comentários
+ Enviar Comentário