Coletânea Python do ZERO às Redes Neurais Artificiais

Fernando Feltrin · Capítulo 137 de 287

Páginas do PDF

Coletânea Python do ZERO às Redes Neurais Artificiais

*args e **kwargs

 

No exemplo anterior criamos uma simples função com apenas 3 parâmetros justapostos e/ou nomeados, porém uma situação bastante recorrente é não termos um número inicial de parâmetros bem definido.

Imagine que você está criando uma determinada de função em que seu corpo haverão uma série de subfunções cada uma com seus respectivos parâmetros, isso acarretaria em um código de legibilidade ruim e confusa.

Em Python é perfeitamente possível contornar essa situação fazendo o uso de *args e **kwargs.

Primeiramente repare na sintaxe, o uso de * asterisco faz com que estas palavras sejam reservadas ao sistema, é simplesmente impossível criar uma variável que seu nome comece com asterisco.

Toda vez que o interpretador em sua leitura léxica encontra um asterisco no campo de parâmetros de uma função ou em alguma comprehension, ele deduz que ali é um espaço alocado onde dados serão repassados.

Outro ponto interessante é que a nomenclatura *args e **kwargs é uma simples convenção, podendo ser criada como qualquer outro tipo de nome como *parametros e **parametros_nomeados por exemplo.

Aproveitando também esta linha de raciocínio, alguns autores costumam diferenciar *args de **kwargs de acordo com o tipo de parâmetro que será usado ou sua aplicação, recomendando o uso de *args sempre que estiver alocando espaço para parâmetros justapostos e **kwargs quando estiver reservando espaço para parâmetros nomeados.

Isto se dá apenas por uma questão de organização e convenção como boa prática de programação, uma vez que na prática não existe tal distinção.

Sendo assim, toda vez que tivermos uma situação onde inicialmente temos um número indefinido de parâmetros, podemos fazer uso de *args e **kwargs para tornar a legibilidade do código de nossas funções mais intuitivo.

 

Partindo para prática, note que é criada uma função de nome msg( ), que tem como parâmetros nome e *args. Dentro de seu corpo nesse exemplo é simplesmente criada uma mensagem onde via f’strings nas respectivas máscaras de substituição estarão os dados ‘Fernando’ para nome, assim como todos os outros dados dispostos sequencialmente conforme a declaração para *args.

 

E acima temos o retorno esperado.