Ver Feed RSS

root@blog:/# chmod o+r *

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

Avalie este Post de Blog

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

Atualizado 01-09-2010 em 09:54 por Magnun

Categorias
Artigos , Artigos , Cursos , Curso de Python , Tutoriais

Comentários

  1. Avatar de tuxdahora
    A lista completa de todas as aulas de Python já criadas pelo Magnun, se encontram em: Curso de Python Gratuito no Under-Linux

    Bom estudo para todos.
  2. Avatar de cleoson
    Olá Magnun!
    Cheguei até aqui e aguardo ansiosamente a continuação do curso! :-) Muito legal a maneira como você passa os conhecimentos. Simples e objetiva!
    Parabéns!

    Um abraço!
  3. Avatar de Magnun
    Olá Cleoson,

    ótimo cara, continue acompanhando o curso, já existem mais 3 aulas após esssa! A listagem do nosso colega tuxdahora está desatualizada (eu não tenho permissão para alterá-la) por isso criei meu próprio índice: Curso de Python - Índice

    Além do mais você pode sempre acompanhar diretamente o meu blog: root@blog:/# chmod o+r *. Nele eu posto não somente o curso de Python, mas divesos assuntos relacionados ao Python e a outros projetos.

    Ate mais...
  4. Avatar de fabraga
    A galera que confiou na lista passada ali no comment do tuxdahora provavelmente nunca mais voltou porque naquela lista essa aula aqui é a última (não foi atualizada!). que pena! :(

+ Enviar Comentário