Capítulo 1, Ambiente
O que é Python e como ele executa
Antes de instalar qualquer coisa, eu quero que você tenha o modelo de execução certo na cabeça, porque ele explica quase todo erro de iniciante.
Código deste capítulo: ambiente/cap01_como_executa.py
Python em poucas palavras
Python é uma linguagem de alto nível e de propósito geral, criada por Guido van Rossum e lançada em 1991. O nome vem do grupo de comédia Monty Python, e não da cobra. Ela suporta programação procedural, orientada a objetos e funcional, e a sintaxe usa indentação para delimitar blocos, o que obriga todo código a ter a mesma cara.
print("Olá, Python")
Olá, Python
Uma linha basta para um programa completo. Em Java, o equivalente exige uma classe, um método main e uma chamada longa. Essa economia é a primeira razão pela qual Python é uma boa primeira linguagem.
Compilado ou interpretado: os dois
A explicação popular diz que Python é "interpretado, linha por linha". Ela é útil para começar e errada em um detalhe que importa. O que o CPython (a implementação de referência) faz é:
- Lê o arquivo inteiro e compila para bytecode, uma representação intermediária.
- Executa esse bytecode na máquina virtual do Python.
Por isso um erro de sintaxe na última linha impede que a primeira linha rode. O Python nem chega a executar nada.
codigo = "print('primeira linha')\nprint('segunda linha'"
try:
compile(codigo, "<exemplo>", "exec")
except SyntaxError as erro:
print("Nada foi executado. Erro de sintaxe:", erro.msg)
Nada foi executado. Erro de sintaxe: '(' was never closed
Já os erros de lógica, de tipo e de valor só aparecem quando a linha problemática é executada:
def dividir(a, b):
return a / b
print("esta linha roda normalmente")
try:
dividir(1, 0)
except ZeroDivisionError as erro:
print("erro só apareceu na execução:", erro)
esta linha roda normalmente
erro só apareceu na execução: division by zero
Se você quiser ver o bytecode, o módulo dis mostra. O resultado muda de versão para versão do Python, por isso eu não fixo a saída aqui. Rode no seu computador:
import dis
def soma(a, b):
return a + b
dis.dis(soma)
Onde cada erro aparece
| Fase | O que acontece | Erros típicos |
|---|---|---|
| Compilação | O arquivo inteiro é lido e traduzido para bytecode | SyntaxError, IndentationError |
| Execução | O bytecode roda, uma instrução por vez | NameError, TypeError, ValueError, ZeroDivisionError |
Guarde essa tabela. No capítulo de exceções eu mostro que os dois grupos pertencem à mesma família de classes, mas a diferença de quando o erro aparece continua valendo.
Bytecode e a pasta __pycache__
Quando você importa um módulo, o Python grava o bytecode em arquivos
.pycdentro de__pycache__, para não recompilar na próxima vez. Pode apagar a pasta quando quiser: ela é recriada. E ela nunca vai para o Git.
Onde Python entra no seu trabalho
Python aparece em automação e scripts, em análise de dados, em APIs e sistemas web (Django, Flask e FastAPI), em testes e em quase toda a camada de orquestração de projetos de inteligência artificial. Vale uma observação honesta sobre este último caso: as bibliotecas de IA fazem o trabalho pesado em código compilado (C, C++, CUDA), e Python é a cola que as conecta. Essa é a forma mais saudável de pensar na linguagem: ela é excelente para expressar a intenção e boa o bastante em desempenho quando o gargalo está em outra camada.