0% acharam este documento útil (0 voto)
3 visualizações13 páginas

Python para Devs Java Marvis

O documento é um guia prático para desenvolvedores Java que desejam aprender Python, focando na sintaxe necessária para o projeto Marvis. Ele abrange tópicos essenciais como variáveis, funções, classes, listas, controle de fluxo, exceções e importações, com comparações diretas entre Python e Java. O guia é direto e prático, evitando teorias desnecessárias e apresentando exemplos reais do código do Marvis.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações13 páginas

Python para Devs Java Marvis

O documento é um guia prático para desenvolvedores Java que desejam aprender Python, focando na sintaxe necessária para o projeto Marvis. Ele abrange tópicos essenciais como variáveis, funções, classes, listas, controle de fluxo, exceções e importações, com comparações diretas entre Python e Java. O guia é direto e prático, evitando teorias desnecessárias e apresentando exemplos reais do código do Marvis.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Python para Devs Java Guia Focado · Projeto Marvis · Atech

PROJETO MARVIS · ATECH

Python para Devs Java

Guia de sobrevivência focado exatamente no que você vai usar.


Você já sabe lógica e POO com Java. Este guia cobre só a sintaxe Python necessária para
construir o Marvis — sem enrolação, sem teoria desnecessária.

7 seções Java vs Python Exemplos reais


de sintaxe essencial em cada tópico do código do Marvis

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

1 Variáveis e Tipos
Sem declaração de tipo — Python infere automaticamente
Em Java você declara o tipo antes da variável. Em Python, simplesmente atribui o valor — o tipo é
inferido. Não existe int, String ou ponto-e-vírgula.
Python · Marvis Java · Equivalente
# Python — sem tipo, sem // Java — tipo obrigatório
ponto-e-vírgula
nome = 'Marvis' String nome = "Marvis";
versao = 1 int versao = 1;
preco = 9.99 double preco = 9.99;
ativo = True boolean ativo = true;
nada = None Object nada = null;

# Múltipla atribuição // Sem equivalente direto


x, y, z = 1, 2, 3

# f-string (equivale ao [Link]) // [Link]


msg = f'Projeto {nome} v{versao}' String msg = [Link]("Projeto %s
v%d", nome, versao);

🐍 No Marvis você vai usar f-strings o tempo todo


Ex: [Link](f'[green]Marvis v{versao} inicializado[/green]') — a variável vai direto dentro das {}.

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

2 Funções e Type Hints


def no lugar de void/return type — indentação é obrigatória
Python usa def para declarar funções. Sem chaves {} — a indentação (4 espaços) define os blocos.
Type hints são opcionais mas recomendados para legibilidade.
Python · Marvis Java · Equivalente
# Função simples // Método de instância
def somar(a, b): int somar(int a, int b) {
return a + b return a + b;
}
# Com type hints (recomendado)
def somar(a: int, b: int) -> int: // Tipos sempre explícitos
return a + b int somar(int a, int b) {
return a + b;
# Valor padrão de parâmetro }
def cumprimentar(nome: str, formal:
bool = False) -> str:
if formal: // Sobrecarga de método
return f'Bom dia, {nome}.' String cumprimentar(String nome) { ...
}
return f'Oi, {nome}!' String cumprimentar(String nome,
boolean formal) {
... }
# Chamada
cumprimentar('Ana') # usa // Chamada
formal=False
cumprimentar('Ana', formal=True) cumprimentar("Ana");
cumprimentar("Ana", true);

Exemplo real do Marvis:


# No Marvis — exemplo real de core/[Link]
def send(self, messages: list, system: str) -> str:
response = [Link](
model=[Link],
max_tokens=self.max_tokens,
system=system,
messages=messages
)
return [Link][0].text

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

3 Classes e self
self é o this do Java — e deve aparecer em todo método
Classes em Python têm sintaxe mais limpa que Java. O construtor se chama __init__ e o self é o
equivalente ao this — mas precisa ser declarado explicitamente em cada método.
Python · Marvis Java · Equivalente
class MarvisAgent: class MarvisAgent {
# Atributo de classe (static) // Atributo estático
versao = '0.1.0' static String versao = "0.1.0";

# Construtor // Construtor
def __init__(self, model: str): public MarvisAgent(String model) {
[Link] = model # [Link] = model;
atributo de instância
[Link] = [] [Link] = new
ArrayList<>();
}
# Método
def chat(self, mensagem: str) -> // Método
str:
[Link](mensagem) public String chat(String mensagem)
{
return f'Resposta de [Link](mensagem);
{[Link]}'
return "Resposta de " + model;
# Método estático }
@staticmethod
def versao_atual() -> str: // Método estático
return [Link] public static String versaoAtual()
{
return [Link];
# Instanciar }
agente = }
MarvisAgent('claude-sonnet-4-5')
[Link]('Olá') // Instanciar
MarvisAgent agente = new
MarvisAgent(...);
[Link]("Olá");

⚠️ Toda classe do Marvis vai ter __init__ + self


Se esquecer o self como primeiro parâmetro do método, Python vai lançar TypeError. É o erro mais
comum de quem vem do Java.

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

4 Listas e Dicionários
list = ArrayList | dict = HashMap — mas muito mais simples
Estas duas estruturas estão em absolutamente todo código Python. O histórico de mensagens do
Marvis é uma list de dicts — você vai usá-las centenas de vezes.
Python · Marvis Java · Equivalente
# LIST — equivale ao ArrayList<T> // ArrayList<String>
msgs = [] # lista List<String> msgs = new ArrayList<>();
vazia
msgs = ['a', 'b', 'c'] List<String> msgs =
[Link]("a","b","c");
[Link]('d') # add() [Link]("d");
msgs[0] # get(0) → [Link](0);
'a'
msgs[-1] # último → [Link]([Link]() - 1);
'd'
len(msgs) # size() [Link]();
msgs[1:3] # slice → [Link](1, 3);
['b','c']
'a' in msgs # [Link]("a");
contains()

# DICT — equivale ao HashMap<K,V> // HashMap<String, String>


msg = {} # dict Map<String,String> msg = new
vazio HashMap<>();
msg = {'role': 'user', [Link]("role", "user");
'content': 'Olá'} [Link]("content", "Olá");
msg['role'] # [Link]("role");
get('role')
msg['novo'] = 'valor' # put() [Link]("novo", "valor");
'role' in msg # [Link]("role");
containsKey()
[Link]('x', 'default') # [Link]("x", "default");
getOrDefault()
[Link]() / [Link]() [Link]() / [Link]();

Estrutura real do histórico no Marvis:


# No Marvis — histórico de mensagens é exatamente isso:
messages = [
{'role': 'user', 'content': 'Quem é você?'},
{'role': 'assistant', 'content': 'Sou o Marvis da Atech.'},
{'role': 'user', 'content': 'O que você faz?'},
]

# Adicionar nova mensagem:


[Link]({'role': 'user', 'content': novo_input})

# Percorrer:
for msg in messages:
print(msg['role'], msg['content'])

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

5 Controle de Fluxo e Loops


if / for / while — mesma lógica, sintaxe mais limpa
Python · Java · Equivalente
Marvis
# IF / // IF / ELSE IF / ELSE
ELIF /
ELSE
if cmd if ([Link]("/quit")) {
==
'/quit'
:
return false;
return
False
elif } else if ([Link]("/reset")) {
cmd ==
'/reset
':
[Link]();
agente.
reset()
else: } else {
[Link]("Inválido");
print('
Comando
inválid
o')
}
# FOR — // FOR-EACH
itera
diretam
ente no
objeto
for msg for (Map<String,String> msg : messages) {
in
message
s:
[Link]([Link]("content"));
print(m
sg['con
tent'])
}
# FOR // FOR com índice
com
índice
for i, for (int i=0; i<[Link](); i++) {
msg in
enumera
te(mess
ages):
[Link](i + ": " + ...) ;
print(f
'{i}:
{msg["c
ontent"
]}')
}
# FOR // FOR numérico
tipo
range

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

(Java:
for
i=0;
i<5;
i++)
for i for (int i = 0; i < 5; i++) {
in
range(5
):
#
0,1,2,3
,4
[Link](i);
print(i
)
}
# WHILE // WHILE
while while (true) {
True:
String e = [Link]();
entrada
=
input('
> ')
if if ([Link]("sair")) break;
entrada
==
'sair':
break
}
# LIST // Sem equivalente direto (Stream API é verboso)
COMPREH
ENSION
(podero
so!)
textos List<String> textos = [Link]()
=
[m['con
tent']
for m
in
message
s]
usuario .map(m -> [Link]("content")).collect(...);
s = [m
for m
in
message
s if
m['role
']=='us
er']

🐍 List comprehension vai aparecer muito no Marvis


A linha: textos = [t for t in [Link] if [Link] == 'text'] — filtra e transforma a lista em uma linha.
É o padrão usado no SDK da Anthropic.

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

6 Exceções, Arquivos e with


try/except = try/catch | with = try-with-resources
Python · Java · Equivalente
Marvis
# TRY / // TRY / CATCH / FINALLY
EXCEPT
/
FINALLY
try: try {
String r = [Link](msgs);
respost
a =
cliente
.send(m
sgs)
except } catch (IllegalArgumentException e) {
ValueEr
ror as
e:
[Link]("Erro: " + e);
print(f
'Erro
de
valor:
{e}')
except } catch (Exception e) {
Excepti
on as
e:
[Link]("Erro: " + e);
print(f
'Erro
genéric
o:
{e}')
finally } finally {
:
[Link]("Sempre");
print('
Sempre
executa
')
}
# // Lançar exceção
Lançar
exceção
raise throw new IllegalArgumentException("...");
ValueEr
ror('AP
I key
ausente
')

# ABRIR // TRY-WITH-RESOURCES
ARQUIVO
— with
fecha
automat
icament
e

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

with try (BufferedReader r =


open('p
rompt.m
d',
'r',
encodin
g='utf-
8') as
f:
new BufferedReader(new FileReader("f"))) {
conteud
o =
[Link](
)
# lê
tudo
String conteudo = [Link]()...
# }
Escreve
r
arquivo
with // Escrever arquivo
open('o
utput.m
d',
'w',
encodin
g='utf-
8') as
f:
try (FileWriter fw = new FileWriter("out")) {
[Link]
('#
Roadmap
\n')
[Link]("# Roadmap\n");
[Link]
(conteu
do)
[Link](conteudo);
# }
Verific
ar se
arquivo
existe
import // Verificar se existe
os
if File f = new File("[Link]");
[Link]
.exists
('promp
[Link]'):
if ([Link]()) { ... }
print('
Arquivo
encontr
ado')

Exemplo real do Marvis — leitura de arquivo com tratamento:


# No Marvis — carregando o System Prompt:
def load_system_prompt(path: str = 'prompts/system_prompt.md') -> str:
if not [Link](path):

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

raise FileNotFoundError(f'Arquivo não encontrado: {path}')


try:
with open(path, 'r', encoding='utf-8') as f:
return [Link]().strip()
except Exception as e:
raise RuntimeError(f'Erro ao ler prompt: {e}')

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

7 Imports, Módulos e Ambiente


import = import Java | [Link] = [Link]
Python organiza código em módulos (arquivos .py). Para usar código de outro arquivo, você importa. O
os é o equivalente ao System do Java para variáveis de ambiente e caminhos de arquivo.

Python · Marvis Java · Equivalente


# Importar módulo inteiro // Import de pacote
import os import [Link];
import json import [Link].*;

# Importar só o que precisa // Sem equivalente — Java sempre


(recomendado) importa a classe
from pathlib import Path import [Link];
from typing import List, Dict, Optional import [Link];
import [Link];
# Importar de arquivo local
from [Link] import MarvisClient // Import de classe local (mesmo pacote
= automático)
from [Link] import import [Link];
ConversationMemory
from prompts import load_system_prompt import
[Link];

# Variáveis de ambiente // Variáveis de ambiente


import os import
[Link];
from dotenv import load_dotenv
Dotenv dotenv = [Link]();
load_dotenv() # carrega o .env
String apiKey =
[Link]("ANTHROPIC_API_KEY");
api_key = String model =
[Link]('ANTHROPIC_API_KEY') [Link]("MARVIS_MODEL",
model = [Link]('MARVIS_MODEL',
'claude-sonnet-4-5') "claude-sonnet-4-5");
if (apiKey == null) {
if not api_key: throw new
IllegalStateException("...");
raise ValueError('API key }
ausente!')

Generators com yield — padrão do streaming no Marvis:


# Generators e yield — usados no streaming do Marvis
# yield é como retornar parcialmente, mantendo o estado da função

def stream_chat(self, user_input: str):


[Link].add_user(user_input)
full_response = []

# 'yield' entrega um valor e PAUSA — a função continua depois


for token in [Link](messages=[Link].get_history(),
system=self.system_prompt):
full_response.append(token)
yield token # ← cada token é entregue imediatamente

[Link].add_assistant(''.join(full_response))

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

# Consumir um generator:
for token in agente.stream_chat('Olá'): # cada iteração recebe um token
print(token, end='', flush=True)

⚡ yield é o coração do streaming


Em vez de esperar a resposta completa, yield entrega cada pedaço assim que chega. É exatamente o
que faz o texto aparecer progressivamente no terminal do Marvis.

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.


Python para Devs Java Guia Focado · Projeto Marvis · Atech

Cheat Sheet · Referência Rápida


Conceito Python Java
Variável string nome = 'Marvis' String nome = "Marvis";

Interpolação f'Olá {nome}' [Link]("Olá %s",


nome)

Null None null

Booleano True / False true / false

Função def fn(a: int) -> str: String fn(int a) {

Construtor def __init__(self): public Classe() {

This [Link] [Link]

Lista vazia lista = [] new ArrayList<>()

Dicionário d = {'k': 'v'} new HashMap<>()

Adicionar lista [Link](x) [Link](x)

Tamanho len(lista) [Link]()

Contém? 'x' in lista [Link]("x")

Try/Catch try: ... except Ex as e: try { } catch(Ex e) { }

Lançar erro raise ValueError('msg') throw new


IllegalArgumentException()

Ler arquivo open('f', 'r') as f: new FileReader("f")


[Link]()

Var de ambiente [Link]('KEY') [Link]("KEY")

Import local from [Link] import import


Agent [Link];

Comentário # comentário // comentário

Print print(f'texto {var}') [Link]("texto


"+var);

Retorno return valor return valor;

PYTHON PARA DEVS JAVA · PROJETO MARVIS · ATECH


A lógica você já tem. A sintaxe é só uma questão de dias.

Atech · Marvis ProjectVocê já sabe lógica. Só falta a sintaxe.

Você também pode gostar