Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Combinação de Argumentos Arbitrários Posicionais e Nomeados | Argumentos Arbitrários
Tutorial de Funções em Python
Seção 3. Capítulo 3
single

single

Combinação de Argumentos Arbitrários Posicionais e Nomeados

Deslize para mostrar o menu

Considere uma função que calcula o custo total de vários itens, permitindo que você passe qualquer quantidade de preços e configurações opcionais por palavra-chave, como descontos ou impostos.

12345678910111213141516171819202122232425
def calculate_total_cost(*prices, **settings): subtotal = sum(prices) discount = settings.get('discount', 0) tax = settings.get('tax', 0) discount_amount = subtotal * (discount / 100) taxed_amount = (subtotal - discount_amount) * (1 + tax / 100) print(f'Subtotal: ${subtotal:.2f}') if discount > 0: print(f'Discount: {discount}% (-${discount_amount:.2f})') else: print('No discount applied.') if tax > 0: print(f'Tax: {tax}% (+${taxed_amount - (subtotal - discount_amount):.2f})') print(f'Final total: ${taxed_amount:.2f}') print() # Examples of using the function calculate_total_cost(1000, 250, 50) calculate_total_cost(1200, 800, discount=10) calculate_total_cost(500, 750, 250, discount=5, tax=8)

No código acima, observe a linha settings.get('discount', 0). Como settings reúne argumentos nomeados em um dicionário padrão do Python, utiliza-se o método .get() do dicionário para recuperar valores de forma segura.

Normalmente, se você tentar buscar uma chave que não existe em um dicionário usando colchetes (como settings['discount']), o Python irá interromper a execução e lançar um KeyError. O método .get() evita isso ao permitir que você forneça um valor padrão de retorno.

A sintaxe funciona assim:

dictionary.get(key, default_value)

key: o nome da configuração que você está procurando (por exemplo, 'discount' ou 'tax').
default_value: o valor retornado caso essa chave não tenha sido passada para a função.

Regras para Combinação de Argumentos Arbitrários

Argumentos Posicionais Arbitrários (*args)

*args coleta todos os argumentos posicionais extras em uma tupla. Neste exemplo, a função pode receber qualquer quantidade de preços de itens sem precisar defini-los explicitamente.

Por exemplo:

calculate_total_cost(500, 250, 100)

Aqui, *prices se torna (500, 250, 100).

Argumentos Nomeados Arbitrários (**kwargs)

**kwargs coleta todos os argumentos nomeados (keyword) em um dicionário. Isso permite que a função aceite configurações nomeadas adicionais como discount ou tax, mesmo que não tenham sido pré-definidas.

Por exemplo:

calculate_total_cost(1000, 500, discount=10, tax=5)

Aqui, **settings se torna {'discount': 10, 'tax': 5}.

Combinação dos Dois

É possível utilizar *args e **kwargs na mesma função para obter máxima flexibilidade — permitindo lidar com qualquer quantidade de valores posicionais e qualquer combinação de configurações nomeadas.

Note
Nota

Sempre coloque *args antes de **kwargs na assinatura da função – inverter a ordem resultará em um SyntaxError.

Tarefa

Deslize para começar a programar

Implemente uma função generate_report que aceite qualquer quantidade de notas numéricas e configurações opcionais por palavra-chave.

  1. Utilize *args para coletar as notas (nomeie o parâmetro como scores) e **kwargs para coletar as configurações opcionais.

  2. Calcule a média de todas as notas fornecidas somando todos os valores em scores e dividindo pelo número de notas:
    Average=sum(scores)len(scores)\text{Average} = \frac{\text{sum}(scores)}{\text{len}(scores)}

  3. Se a chave 'label' estiver presente em **kwargs, utilize seu valor como título do relatório; caso contrário, utilize 'Report'.

  4. Se a chave 'passing_score' estiver presente em **kwargs, verifique se a média atende ou excede esse valor:

    • Se sim, adicione 'Status: Pass' ao relatório.
    • Se não, adicione 'Status: Fail'.
  5. Retorne o resultado como uma string formatada: '{label} | Average: {avg:.2f} | {status}'. Se 'passing_score' não for fornecido, omita a parte do status: '{label} | Average: {avg:.2f}'.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 3
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt