Você está na página 1de 3

Python: entendendo o uso de *args e **kwargs em

funções e métodos
medium.com/rafaeltardivo/python-entendendo-o-uso-de-args-e-kwargs-em-funções-e-métodos-
c8c2810e9dc8

2 de junho de
2018

!Se você já programou em python por mais de 5 minutos, com certeza já se deparou com
e … Seja em uma função em que o uso deles foi necessário, ou mesmo em algum
método que você sobrescreveu:

Vamos então ver como cada um deles funciona e depois estudar alguns casos reais de
uso.

*args
ele não precisa se chamar , mas precisa ter o *Antes de mais nada, ! poderia muito
bem ser ou . O nome “args” é uma convenção.

Imagine uma função em que você precise imprimir o nome de um país e quantas copas
do mundo ele ganhou: A Espanha tem 1 título, o Brasil tem 5… Como faríamos?

def world_cup_titles(country, *args): print('Country: ', country)) for title in args: print('year: ',
title)

Observe que na função, iteramos sobre args, exibindo cada título passado e que o fato
de ser possível iterar sobre uma lista de argumentos nos dá a flexibilidade que
precisamos para o nosso caso.
1/3
1- Chamada com 5 itens no :

>>> world_cup_titles('Brasil', '1958', '1962', '1970', '1994', '2002')Country: BrasilYear: 1958Year:


1962Year: 1970Year: 1994Year: 2002

2- Chamada com 1 item no :

>>> world_cup_titles('Espanha', '2010')Country: EspanhaYear: 2010

**kwargs
ele não precisa se chamar kw, mas precisa ter os **Antes de mais nada, ! poderia
muito bem ser ou *. O nome “kwargs” é uma convenção.

Agora imagine uma situação em que você precise passar diferentes argumentos, talvez
para diferentes propósitos. Como ficaria?

Usaremos uma função de cálculo de preço como exemplo. Nela, teremos dois
argumentos opcionais, e

def calculate_price(value, **kwargs): tax_percentage = kwargs.get('tax_percentage') discount =


kwargs.get('discount') if tax_percentage: value += value * (tax_percentage / 100) if discount:
value -= discount return value

Já que os argumentos são opcionais, podemos calcular o preço final de um produto sem
desconto ou impostos:

>>> final_price = calculate_price(100.0)>>> print(final_price)100.0

Mas também podemos aplicar um desconto a ele:

>>> final_price = calculate_price(100.0, discount=5.0)>>> print(final_price)95.0

Ou adicionar um imposto:

>>> final_price = calculate_price(100.0, tax_percentage=7)>>> print(final_price)107.0

Ou ainda, aplicar um desconto e adicionar um imposto:

>>> final_price = calculate_price(100.0, tax_percentage=7, discount=5.0)>>> print(final_price)102.0

Mas por que usei **kwargs e não *args?


extremamente importante, identificados por seus nomesObserve no exemplo acima
que o nome dos argumentos variáveis é já que por ele é possível saber se o valor se trata
de um imposto ou um desconto a ser aplicado! Não se trata de uma lista de argumentos
a serem iterados, e sim de argumentos opcionais com finalidades completamente
diferentes, !

2/3
Também é possível combinar e mas por hora vamos apenas entender a diferença entre
os dois.

https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/Ah, um link
bacana sobre o assunto:

Até mais!

3/3

Você também pode gostar