Desafio Python

Mesclando configurações com operador pipe

Enunciado

Crie duas funções: config_padrao() que retorna um dicionário com {'tema': 'claro', 'fonte': 'Arial', 'tamanho': 12} e config_usuario() que retorna {'tema': 'escuro', 'tamanho': 14}. Depois, mescle os dois dicionários usando o operador |, dando prioridade às configurações do usuário. Imprima o resultado.

Requisitos

  • As funções devem retornar os dicionários exatamente como especificado.
  • A mesclagem deve ser feita com o operador |.
  • O dicionário final deve ter 'tema' como 'escuro', 'fonte' como 'Arial' e 'tamanho' como 14.

Código inicial

def config_padrao():
    # Seu código aqui
    pass

def config_usuario():
    # Seu código aqui
    pass

# Mescle e imprima

Saída esperada

{'tema': 'escuro', 'fonte': 'Arial', 'tamanho': 14}
Ver dica

Use config_padrao() | config_usuario() para mesclar. O dicionário à direita sobrescreve chaves repetidas.

Mostrar solução
def config_padrao():
    return {'tema': 'claro', 'fonte': 'Arial', 'tamanho': 12}

def config_usuario():
    return {'tema': 'escuro', 'tamanho': 14}

# Mescla com operador pipe: usuário tem prioridade
config_final = config_padrao() | config_usuario()
print(config_final)

Passo a passo

  1. Definimos config_padrao() que retorna um dicionário com três pares chave-valor.
  2. Definimos config_usuario() que retorna um dicionário com duas chaves que também existem no padrão.
  3. Chamamos ambas as funções e aplicamos o operador | para mesclar.
  4. O operador | cria um novo dicionário com todos os pares do primeiro e do segundo; em caso de chaves repetidas, o valor do segundo prevalece.
  5. O resultado é armazenado em config_final.
  6. O print exibe o dicionário mesclado na ordem de inserção: primeiro as chaves do padrão, depois as novas chaves do usuário (nenhuma nova aqui).

Por que funciona

O operador | é a forma idiomática de mesclar dicionários desde o Python 3.9. Ele não modifica os dicionários originais, o que é seguro. A precedência da direita para a esquerda é útil para configurações onde o usuário sobrescreve padrões.

Erros comuns

  • Usar config_padrao() | config_usuario (sem parênteses): tenta mesclar um dicionário com uma função, gerando TypeError.
  • Inverter a ordem: config_usuario() | config_padrao() faria o padrão sobrescrever o usuário, resultando em 'tema': 'claro' e 'tamanho': 12.
  • Esquecer de retornar os dicionários nas funções: retornam None e a mesclagem falha.

Outra forma de resolver

Usar {**config_padrao(), **config_usuario()}:

config_final = {**config_padrao(), **config_usuario()}

Funciona em versões anteriores ao 3.9, mas o operador | é mais legível.

Saída esperada

{'tema': 'escuro', 'fonte': 'Arial', 'tamanho': 14}