Python 3.14: Novidades e Recursos que Você Precisa Conhecer

Conheça as principais novidades do Python 3.14: t-strings, JIT compiler, annotationlib, melhorias de performance e mais.

6 min de leitura Equipe python.dev.br

O Python 3.14 chegou como uma das versões mais ambiciosas da história da linguagem. Enquanto versões anteriores focavam em ajustes pontuais, esta release traz mudanças estruturais que afetam desde quem escreve scripts simples até quem mantém frameworks e bibliotecas. Neste artigo, vamos passar pelas principais novidades, entender o que muda na prática e quando vale a pena adotar cada recurso.

Se você quer se aprofundar em algum recurso específico, ao longo do texto indicamos artigos dedicados a cada tema.

Template Strings (PEP 750)

A novidade mais visível do Python 3.14 é o suporte a template strings com o prefixo t. À primeira vista, elas parecem f-strings, mas o comportamento é diferente: em vez de retornar uma str pronta, a expressão retorna um objeto Template que preserva a estrutura da interpolação.

nome = "Maria"
template = t"Olá, {nome}!"

print(type(template))
# <class 'string.templatelib.Template'>

Isso permite inspecionar, transformar e renderizar cada parte separadamente. O caso de uso mais óbvio é sanitização de HTML, mas o recurso também serve para logging estruturado, DSLs e geração segura de consultas.

from html import escape
from string.templatelib import Interpolation


def html_seguro(template) -> str:
    partes = []
    for parte in template:
        if isinstance(parte, Interpolation):
            partes.append(escape(str(parte.value)))
        else:
            partes.append(parte)
    return "".join(partes)


entrada = "<script>alert('xss')</script>"
resultado = html_seguro(t"<p>{entrada}</p>")
print(resultado)
# <p>&lt;script&gt;alert(&#x27;xss&#x27;)&lt;/script&gt;</p>

Para um guia completo com mais exemplos, veja nosso artigo sobre template strings do Python 3.14.

Compilador JIT Integrado

O Python 3.14 inclui um compilador JIT (Just-In-Time) experimental diretamente no CPython. Isso significa que trechos de código executados repetidamente podem ser compilados para instruções de máquina em tempo de execução, sem que você precise mudar uma linha do seu código.

# Ativar o JIT (experimental)
PYTHON_JIT=1 python meu_script.py

Os ganhos variam conforme o tipo de workload:

CenárioGanho típico
Loops numéricos intensos15-30%
Processamento de strings5-15%
I/O bound (rede, disco)Mínimo
Startup de scripts curtosNenhum

O JIT é especialmente útil para código que passa muito tempo em loops apertados e cálculos repetitivos. Para workloads I/O bound, a diferença é insignificante.

import time


def fibonacci(n: int) -> int:
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)


inicio = time.perf_counter()
resultado = fibonacci(35)
duracao = time.perf_counter() - inicio
print(f"fib(35) = {resultado} em {duracao:.3f}s")

Para benchmarks detalhados e instruções de configuração, confira nosso artigo sobre o compilador JIT do Python 3.14.

Avaliação Tardia de Anotações (PEP 649 e 749)

Uma das mudanças mais impactantes para quem trabalha com tipagem e frameworks é o novo modelo de avaliação tardia de anotações. No Python 3.14, anotações não são mais avaliadas no momento da definição da classe ou função — elas só são processadas quando alguém efetivamente as solicita.

class Pedido:
    itens: list["Item"]  # Funciona sem aspas no 3.14
    total: float

class Item:
    nome: str
    preco: float

Antes do 3.14, a referência a Item antes da sua definição causava NameError. Agora, com avaliação tardia, o Python só resolve a anotação quando você chama algo como get_type_hints() ou usa o novo módulo annotationlib.

import annotationlib

# Acessar anotações de forma segura
anotacoes = annotationlib.get_annotations(Pedido, format=annotationlib.Format.FORWARDREF)
print(anotacoes)

Essa mudança beneficia especialmente quem usa Pydantic, dataclasses, FastAPI e ORMs que dependem de introspecção de tipos. Para detalhes completos, veja nosso artigo sobre annotationlib e anotações no Python 3.14.

Melhorias de Performance Gerais

Além do JIT, o Python 3.14 traz otimizações no interpretador que beneficiam todo código Python:

  • Especialização de bytecode aprimorada: o interpretador adaptativo ficou mais agressivo em otimizar operações comuns.
  • Menor overhead de frames: chamadas de função têm custo reduzido.
  • Otimizações em dict e list: operações frequentes como lookup e append foram otimizadas.
  • Startup mais rápido: o tempo de inicialização do interpretador foi reduzido em cerca de 10%.
# Benchmark simples de dict operations
import time

dados = {str(i): i for i in range(100_000)}

inicio = time.perf_counter()
for _ in range(100):
    total = sum(dados.values())
duracao = time.perf_counter() - inicio

print(f"100 iterações sobre 100k valores: {duracao:.4f}s")

Na prática, scripts e aplicações existentes tendem a rodar entre 5% e 20% mais rápido sem nenhuma alteração no código.

Depreciações e Remoções

Toda versão major do Python remove funcionalidades que estavam marcadas como depreciadas. No 3.14, as principais remoções incluem:

  • asyncio.coroutine: decorador legado removido. Use async def diretamente.
  • typing.TypeAlias: substituído pela sintaxe type nativa (PEP 695, disponível desde o 3.12).
  • Módulos legados: aifc, audioop, chunk, cgi, cgitb, imghdr, mailcap, msilib, nis, nntplib, ossaudiodev, pipes, sndhdr, spwd, sunau, telnetlib, uu, xdrlib — todos removidos definitivamente.

Se seu projeto importa algum desses módulos, é hora de migrar:

# Antes (Python <= 3.12)
from typing import TypeAlias

Nome: TypeAlias = str

# Depois (Python >= 3.12)
type Nome = str
# Antes
import cgi
form = cgi.FieldStorage()

# Depois — use frameworks modernos
from fastapi import Form

Novas Funcionalidades Menores

Além dos destaques, o Python 3.14 traz várias melhorias menores que vale conhecer:

itertools.batched aprimorado

O itertools.batched, introduzido no 3.12, recebeu melhorias de performance:

from itertools import batched

dados = range(1, 11)
for lote in batched(dados, 3):
    print(lote)
# (1, 2, 3)
# (4, 5, 6)
# (7, 8, 9)
# (10,)

Mensagens de erro mais claras

O Python continua investindo em mensagens de erro descritivas. No 3.14, erros de sintaxe e tipo oferecem sugestões mais precisas:

# Exemplo de mensagem de erro melhorada
>>> dicionario = {"a": 1}
>>> dicionario["b"]
KeyError: 'b'
# Did you mean: 'a'?

Melhorias no pathlib

O módulo pathlib ganhou novos métodos utilitários:

from pathlib import Path

# Verificar extensão de forma mais limpa
arquivo = Path("relatorio.csv")
print(arquivo.suffix)  # .csv

Como Instalar e Testar o Python 3.14

A maneira mais prática de testar o Python 3.14 é usando o UV:

# Instalar Python 3.14 com UV
uv python install 3.14

# Criar um projeto com Python 3.14
uv init meu-projeto --python 3.14
cd meu-projeto
uv run python --version
# Python 3.14.0

Se preferir o pyenv:

pyenv install 3.14.0
pyenv local 3.14.0
python --version

Para Docker:

FROM python:3.14-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

Vale a Pena Migrar Agora?

A resposta depende do seu contexto:

CenárioRecomendação
Projetos novosSim, comece no 3.14
Projetos em produção (3.12/3.13)Teste em staging primeiro
Bibliotecas públicasSuporte 3.10+ e teste no 3.14
Scripts pessoaisSim, migre sem medo

O Python 3.14 mantém boa compatibilidade com código existente. A maioria das quebras vem de módulos removidos que já estavam depreciados há anos. Se seu projeto segue boas práticas e evita imports legados, a migração tende a ser suave.

Conclusão

O Python 3.14 é uma versão que marca uma inflexão na linguagem. Template strings abrem possibilidades para processamento seguro de texto. O compilador JIT mostra que performance é prioridade. E a avaliação tardia de anotações resolve problemas antigos de tipagem que incomodavam a comunidade há anos.

Se você está acompanhando a evolução do Python, esta é uma das releases mais interessantes para estudar e experimentar. Comece instalando o 3.14, rode seus testes, e explore os novos recursos aos poucos.

Para continuar aprendendo, confira nossos artigos sobre template strings, compilador JIT, annotationlib e tipagem estática com mypy.

Curiosidade: enquanto o Python investe em JIT e template strings, Go já compila nativamente para código de máquina desde o início, e Rust entrega performance zero-cost com segurança de memória garantida em tempo de compilação — cada linguagem com sua abordagem para resolver o desafio de performance.

E

Equipe python.dev.br

Contribuidor do Python Brasil — Aprenda Python em Português