LocalContext | Decimal | Python
- LocalContext | Decimal | Python
Em Python, localcontext é uma função do módulo decimal que serve para criar um contexto decimal temporário — ou seja, um ambiente local onde você pode mudar regras de arredondamento, precisão, tratamento de erros numéricos, etc., sem afetar o contexto global do programa.
🔍 Contexto: módulo decimal
O módulo decimal fornece aritmética de ponto flutuante com precisão controlada, útil para cálculos financeiros e científicos.
O comportamento do módulo é controlado por um contexto decimal (decimal.Context), que define:
- Precisão (
prec) - Modo de arredondamento (
rounding) - Flags e traps de exceção (como
DivisionByZero,Overflow, etc.)
⚙️ decimal.localcontext()
A função localcontext() cria um contexto temporário, geralmente usado com with.
Exemplo básico:
from decimal import Decimal, localcontext
# Contexto global
a = Decimal('1') / Decimal('7')
print(a) # mostra 0.1428571428571428571428571429 (depende da precisão global)
# Contexto local temporário
with localcontext() as ctx:
ctx.prec = 5 # muda a precisão apenas dentro do bloco
b = Decimal('1') / Decimal('7')
print(b) # mostra 0.14286
# fora do bloco, o contexto volta ao normal
c = Decimal('1') / Decimal('7')
print(c) # volta à precisão global original
🧠 O que acontece internamente
localcontext()faz uma cópia do contexto atual (getcontext()).- Você pode modificar essa cópia dentro do bloco
with. - Assim que o bloco termina, o contexto antigo é automaticamente restaurado.
💡 Exemplo prático (cálculos financeiros)
from decimal import Decimal, localcontext, ROUND_HALF_UP
valor = Decimal('10.125')
with localcontext() as ctx:
ctx.prec = 6
ctx.rounding = ROUND_HALF_UP
resultado = valor.quantize(Decimal('0.01'))
print(resultado) # 10.13
Aqui, garantimos que o arredondamento siga a regra “meio para cima” (ROUND_HALF_UP), comum em finanças.
📦 Resumo rápido
| Função | O que faz |
|---|---|
decimal.getcontext() | Obtém o contexto global atual |
decimal.setcontext(ctx) | Define um novo contexto global |
decimal.localcontext(ctx=None) | Cria um contexto temporário (com base no atual ou em outro fornecido) |