惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
宝玉的分享
宝玉的分享
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
Visual Studio Blog
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
A
About on SuperTechFans
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家
P
Proofpoint News Feed
L
LangChain Blog
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
Martin Fowler
Martin Fowler

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Entendendo o `if __name__ == "__main__"` no Python de for...
Felipe Cezar · 2026-05-14 · via DEV Community

Se você já viu Python por algum tempo, provavelmente encontrou algo assim:

if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode

Esse trecho parece estranho no começo, mas a ideia é simples:

Ele serve para executar uma parte do código apenas quando aquele arquivo for executado diretamente.

Ou seja, ele ajuda a separar duas situações:

  1. Quando um arquivo Python é executado diretamente.
  2. Quando um arquivo Python é importado por outro arquivo.

E essa diferença importa bastante.


Primeiro: main.py não é a mesma coisa que "__main__"

Muita gente chama o arquivo principal de um projeto Python de main.py.

Por exemplo:

python main.py

Enter fullscreen mode Exit fullscreen mode

Mas isso é só uma convenção.

O arquivo poderia se chamar:

python app.py

Enter fullscreen mode Exit fullscreen mode

ou:

python calculadora.py

Enter fullscreen mode Exit fullscreen mode

ou:

python sistema.py

Enter fullscreen mode Exit fullscreen mode

O nome do arquivo não precisa ser main.py.

O ponto importante é:

O arquivo que você executa diretamente recebe o valor "__main__" dentro da variável __name__.

Então "__main__" não vem do nome main.py.

Ele vem do fato de aquele arquivo ser o ponto de entrada da execução.


O que é __name__?

Todo arquivo Python tem uma variável especial chamada __name__.

Ela muda dependendo de como o arquivo está sendo usado.

Se o arquivo for executado diretamente, __name__ vale:

"__main__"

Enter fullscreen mode Exit fullscreen mode

Se o arquivo for importado por outro arquivo, __name__ vale o nome do próprio módulo.

Vamos ver isso na prática.


Exemplo 1: executando o arquivo diretamente

Arquivo: calculadora.py

print(__name__)

Enter fullscreen mode Exit fullscreen mode

Agora execute no terminal:

python calculadora.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

__main__

Enter fullscreen mode Exit fullscreen mode

Por quê?

Porque o arquivo calculadora.py foi executado diretamente.

Naquele momento, para o Python, ele é o arquivo principal da execução.


Exemplo 2: importando o arquivo

Agora imagine outro arquivo.

Arquivo: app.py

import calculadora

Enter fullscreen mode Exit fullscreen mode

Execute:

python app.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

calculadora

Enter fullscreen mode Exit fullscreen mode

Agora o calculadora.py não foi executado diretamente.

Ele foi apenas importado pelo app.py.

Então, dentro de calculadora.py, o valor de __name__ não é "__main__".

É "calculadora".


Então o que significa if __name__ == "__main__"?

Significa:

"Execute esse bloco apenas se este arquivo for executado diretamente."

Veja este exemplo.

Arquivo: calculadora.py

def somar(a, b):
    return a + b

if __name__ == "__main__":
    print(somar(10, 5))

Enter fullscreen mode Exit fullscreen mode

Se você executar:

python calculadora.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

15

Enter fullscreen mode Exit fullscreen mode

Isso acontece porque calculadora.py foi executado diretamente.

Então, dentro dele:

__name__ == "__main__"

Enter fullscreen mode Exit fullscreen mode

é verdadeiro.


Agora usando calculadora.py em outro arquivo

Arquivo: app.py

from calculadora import somar

resultado = somar(2, 3)
print(resultado)

Enter fullscreen mode Exit fullscreen mode

Execute:

python app.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

5

Enter fullscreen mode Exit fullscreen mode

Repare que o print(somar(10, 5)) que está dentro de calculadora.py não foi executado.

Por quê?

Porque agora quem foi executado diretamente foi o app.py, não o calculadora.py.

A situação fica assim:

Dentro de app.py

__name__ == "__main__"

Enter fullscreen mode Exit fullscreen mode

Dentro de calculadora.py

__name__ == "calculadora"

Enter fullscreen mode Exit fullscreen mode

Por isso este bloco não roda:

Arquivo: calculadora.py

if __name__ == "__main__":
    print(somar(10, 5))

Enter fullscreen mode Exit fullscreen mode

O calculadora.py foi importado.

Ele não foi o arquivo principal da execução.


O que acontece se eu não usar isso?

O problema é que código solto dentro de um arquivo Python pode rodar automaticamente quando esse arquivo é importado.

Veja este exemplo.

Arquivo: relatorio.py

def gerar_relatorio():
    print("Gerando relatório...")

gerar_relatorio()

Enter fullscreen mode Exit fullscreen mode

Agora outro arquivo importa esse módulo.

Arquivo: app.py

import relatorio

print("Sistema iniciado")

Enter fullscreen mode Exit fullscreen mode

Execute:

python app.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

Gerando relatório...
Sistema iniciado

Enter fullscreen mode Exit fullscreen mode

Mas repare: em app.py, você não chamou gerar_relatorio().

Mesmo assim, a função rodou.

Ela rodou porque estava solta dentro de relatorio.py.

Quando o Python importou relatorio.py, ele executou o código que estava no arquivo.


Por que isso é um problema?

Em um exemplo simples, isso só gera um print inesperado.

Mas em projetos reais, isso pode causar problemas maiores, como:

  • chamadas de API acontecendo sem querer;
  • consultas ao banco de dados só por causa de um import;
  • arquivos sendo criados, lidos ou alterados no momento errado;
  • funções rodando antes da hora;
  • testes ficando confusos;
  • código difícil de reaproveitar;
  • comportamento inesperado na aplicação.

Ou seja, sem esse cuidado, importar um arquivo pode fazer mais coisa do que deveria.


A versão correta

Agora veja a versão melhorada.

Arquivo: relatorio.py

def gerar_relatorio():
    print("Gerando relatório...")

if __name__ == "__main__":
    gerar_relatorio()

Enter fullscreen mode Exit fullscreen mode

Arquivo: app.py

import relatorio

print("Sistema iniciado")

Enter fullscreen mode Exit fullscreen mode

Execute:

python app.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

Sistema iniciado

Enter fullscreen mode Exit fullscreen mode

Agora o relatório não é gerado automaticamente.

Por quê?

Porque relatorio.py foi importado, não executado diretamente.

Se você quiser executar o relatório diretamente, aí sim:

python relatorio.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

Gerando relatório...

Enter fullscreen mode Exit fullscreen mode

Nesse caso, relatorio.py virou o arquivo principal da execução.

Então, dentro dele:

__name__ == "__main__"

Enter fullscreen mode Exit fullscreen mode

é verdadeiro.


E a função main()?

É muito comum ver este padrão:

Arquivo: main.py

def main():
    print("Programa iniciado")

if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode

A função main() não é obrigatória.

Ela é apenas uma forma organizada de concentrar o ponto inicial do programa.

Você poderia escrever assim:

Arquivo: main.py

print("Programa iniciado")

Enter fullscreen mode Exit fullscreen mode

Isso funciona.

Mas em projetos maiores, geralmente fica melhor separar as coisas.

Exemplo:

Arquivo: main.py

def carregar_dados():
    print("Carregando dados...")

def processar_dados():
    print("Processando dados...")

def salvar_resultado():
    print("Salvando resultado...")

def main():
    carregar_dados()
    processar_dados()
    salvar_resultado()

if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode

Esse padrão deixa claro qual é o fluxo principal do programa.

As funções ficam disponíveis para serem reutilizadas, mas a execução principal só acontece quando o arquivo é executado diretamente.


Então por que usar if __name__ == "__main__"?

Use quando um arquivo Python pode ser:

  1. Executado diretamente.
  2. Importado por outro arquivo.

Ele evita que código rode sem querer durante um import.

Na prática, ele diz:

"Essa parte aqui só deve rodar se este arquivo for o ponto de entrada da aplicação."


Regra prática

Se o arquivo só tem funções, classes ou constantes, talvez você não precise dele.

Exemplo:

Arquivo: operacoes.py

def somar(a, b):
    return a + b

def subtrair(a, b):
    return a - b

Enter fullscreen mode Exit fullscreen mode

Esse arquivo só oferece funções para outros arquivos usarem.

Agora, se o arquivo também tem uma execução principal, use o if.

Arquivo: operacoes.py

def somar(a, b):
    return a + b

def subtrair(a, b):
    return a - b

if __name__ == "__main__":
    print(somar(10, 5))
    print(subtrair(10, 5))

Enter fullscreen mode Exit fullscreen mode

Assim, se você executar diretamente:

python operacoes.py

Enter fullscreen mode Exit fullscreen mode

A saída será:

15
5

Enter fullscreen mode Exit fullscreen mode

Mas se outro arquivo importar operacoes.py, esses prints não vão rodar automaticamente.


Resumo direto

Quando você executa um arquivo diretamente:

python app.py

Enter fullscreen mode Exit fullscreen mode

dentro de app.py, o Python define:

__name__ = "__main__"

Enter fullscreen mode Exit fullscreen mode

Quando você importa um arquivo:

Arquivo: app.py

import calculadora

Enter fullscreen mode Exit fullscreen mode

dentro de calculadora.py, o Python define:

__name__ = "calculadora"

Enter fullscreen mode Exit fullscreen mode

Então este código:

Arquivo: calculadora.py

if __name__ == "__main__":
    print("Rodando diretamente")

Enter fullscreen mode Exit fullscreen mode

significa:

"Só execute esse bloco se o arquivo calculadora.py for executado diretamente."

Se rodar:

python calculadora.py

Enter fullscreen mode Exit fullscreen mode

o bloco executa.

Se fizer:

Arquivo: app.py

import calculadora

Enter fullscreen mode Exit fullscreen mode

o bloco não executa.


Conclusão

O if __name__ == "__main__" existe para evitar execução acidental de código quando um arquivo Python é importado.

Ele separa bem duas intenções:

  • importar um arquivo para usar suas funções, classes e variáveis;
  • executar um arquivo como programa principal.

A ideia central é simples:

"__main__" é o nome que o Python dá ao arquivo que foi executado diretamente.

Então este padrão:

Arquivo: main.py

def main():
    print("Programa iniciado")

if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode

significa:

"Execute main() apenas se este arquivo for o ponto de entrada do programa."

É simples, evita comportamento inesperado e deixa o código mais organizado.