Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
 Voltar a Blog
Tela cheia

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

4 de Agosto de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 169 vezes

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:

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'}
>>>
Como podemos ver, devemos utilizar 'identificadores' para os argumentos. Esses 'identificadores' são convertidos nas 'chaves' do dicionário.

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:

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}
>>>
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.

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

Fonte: http://under-linux.org/blogs/magnun/%5Bcurso-de-python%5D-funcoes-com-argumentos-indefinidos-parte-2-2-2198/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.