Pular para o conteúdo

    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.

    ambiente/cap01_como_executa.pylinha 10
    print("Olá, Python")
    
    Saída
    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 é:

    1. Lê o arquivo inteiro e compila para bytecode, uma representação intermediária.
    2. 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.

    ambiente/cap01_como_executa.pylinhas 15 a 20
    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)
    
    Saída
    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:

    ambiente/cap01_como_executa.pylinhas 22 a 29
    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)
    
    Saída
    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:

    ambiente/cap01_como_executa.pylinhas 31 a 38
    import dis
    
    
    def soma(a, b):
        return a + b
    
    
    dis.dis(soma)
    

    Onde cada erro aparece

    FaseO que aconteceErros típicos
    CompilaçãoO arquivo inteiro é lido e traduzido para bytecodeSyntaxError, IndentationError
    ExecuçãoO bytecode roda, uma instrução por vezNameError, 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 .pyc dentro 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.