Pular para o conteúdo principal
InicioTutoriaisPython

se __name__ == "__main__" Python: Explicação completa

O bloco if __name__ == "__main__" em Python permite que você defina o código que será executado somente quando o arquivo for executado diretamente como um script, mas não quando for importado como um módulo em outro script.
Actualizado 13 de ago. de 2024  · 8 min leer

O bloco condicional que começa com if __name__ == "__main__" aparece com frequência no código Python. Essa linha pode parecer enigmática, e muitos iniciantes a usam sem saber o que ela faz ou se deveriam usá-la. Os programadores que vêm de outras linguagens também podem entender mal e usar demais essa expressão.

Neste tutorial, você vai se aprofundar no significado da expressão idiomática if__name__ == "__main__" do Python e explorar como e quando usá-la.

Compreensão __name__ e "__main__"

A expressão idiomática if __name__ == "__main__" é uma declaração if que verifica a igualdade.

O primeiro operando à esquerda do operador de igualdade == é o atributo __name__ . Os nomes Python com sublinhados duplos à esquerda e à direita são identificadores especiais. Cada módulo tem um atributo __name__. O Python define essa variável como o nome do módulo, que o sistema de importação do Python usa para identificar cada módulo de forma exclusiva.

No entanto, se o módulo estiver no ambiente de código de nível superior, o que significa que é o módulo usado como ponto de entrada para o programa, o Python define o atributo __name__ como a string "__main__".

Vamos dar uma olhada em alguns exemplos. Vamos criar um script chamado exploring_name_main.py:

# exploring_name_main.py
import random
print(__name__)
print(random.__name__)

Esse script pode ser executado diretamente usando o seguinte comando no terminal:

$ python exploring_name_main.py
__main__
random

O script exploring_name_main.py está no ambiente de código de nível superior, pois é o ponto de entrada do programa. Portanto, a variável __name__ é definida como a cadeia de caracteres "__main__".

No entanto, o módulo random é importado e não está no ambiente de código de nível superior. Seu atributo __name__ é definido como o nome do módulo.

Em seguida, criamos um novo script chamado more_exploration.py, que importa o primeiro script:

# more_exploration.py
import exploring_name_main

Execute esse script usando o seguinte comando no terminal:

$ python more_exploration.py
exploring_name_main
random

O código de um módulo é executado quando o módulo é importado. Portanto, ao executar more_exploration.py, o código exibe a saída das duas chamadas print() em exploring_name_main.py. Como exploring_name_main.py não é mais o ponto de entrada do programa, seu atributo __name__ é definido como o nome do script em vez de "__main__".

Os if __name__ == "__main__" Bloco condicional

A variável __name__ pode ser usada para determinar se um módulo é o ponto de entrada principal de um programa. Portanto, um módulo pode incluir código que só é executado quando você o executa diretamente como um script, mas não quando é importado. Qualquer código que deva ser executado somente quando o script for executado diretamente é incluído no bloco condicional if __name__ == "__main__":

# exploring_name_main.py
import random
print(__name__)
print(random.__name__)
number = random.randint(1, 10)
if __name__ == "__main__":
    print("This script is in the top-level code environment")
    print(f"The number is {number}")

O código em exploring_name_main.py agora inclui um bloco condicional if __name__ == "__main__". Vamos ver se isso faz diferença quando você executa o script:

$ python exploring_name_main.py
__main__
random
This script is in the top-level code environment
The number is 10

Quando o script é executado diretamente, a variável __name__ é definida como a string "__main__". Portanto, a condição na instrução if é avaliada como True, e o Python executa o código no bloco if.

No entanto, quando o módulo é importado, __name__ é definido com o nome do módulo e o programa não executa o bloco if. Lembre-se de que o script more_exploration.py importa exploring_name_main:

$  python more_exploration.py
exploring_name_main
random

O programa não chama as funções print() em exploring_name_main.py. Eles estão no bloco condicional que não é executado, pois __name__ não é igual a "__main__".

Práticas recomendadas e dicas para você usar o Python if __name__ == "__main__"

O idioma if __name__ == "__main__" do Python é usado quando o código deve ser executado somente quando um arquivo é executado como um script em vez de ser importado como um módulo. A distinção entre os termos script e módulo está apenas na forma como o arquivo é usado. Ambos os termos se referem a arquivos com a extensão .py.

Um caso de uso comum é quando um script tem variáveis, funções e classes que podem ser usadas em outros programas. Aqui está um exemplo usando um script chamado shapes.py:

# shapes.py
import math
def find_area_of_circle(radius):
    return math.pi * radius ** 2
def find_area_of_rectangle(width, height):
    return width * height
if __name__ == "__main__":
    shape = int(input("Enter 1 for circle, 2 for rectangle: "))
    if shape == 1:
        radius = int(input("Enter radius: "))
        print(f"The area of the circle is {find_area_of_circle(radius)}")
    elif shape == 2:
        width = int(input("Enter width: "))
        height = int(input("Enter height: "))
        print(f"The area of the rectangle is {find_area_of_rectangle(width, height)}")
Enter 1 for circle, 2 for rectangle: 2
Enter width: 10
Enter height: 20
The area of the rectangle is 200

Esse código não precisa do idioma if __name__ == "__main__" se a intenção for sempre executá-lo como um script. No entanto, a inclusão dessa instrução condicional permite que o código seja importado como um módulo sem executar as linhas no bloco if. Considere outro script chamado more_shapes.py:

# more_shapes.py
import shapes
radius = 5
print(f"The area of the circle defined in 'more_shapes.py' is: "
      f"{shapes.find_area_of_circle(radius)}")
The area of the circle defined in 'more_shapes.py' is: 78.53981633974483

Esse novo script, more_shapes.py, tem acesso às funções definidas em shapes.py por causa da instrução import. No entanto, o código no bloco if __name__ == "__main__" em shapes.py não é executado. Sem a instrução if em shapes.py, todo o código seria executado quando o módulo fosse importado.

O uso do bloco if __name__ == "__main__" para entrada do usuário é um caso de uso comum. A entrada do usuário é omitida se o arquivo for importado como um módulo, mas é incluída quando executada diretamente como código de nível superior.

Usando um main() função

A prática recomendada é incluir o menor número possível de instruções no bloco if __name__ == "__main__", pois isso torna o código mais legível. Uma maneira comum de conseguir isso é criar uma função, que é chamada no bloco condicional. É comum que essa função seja chamada de main(), mas qualquer nome de função é válido:

# shapes.py
import math
def find_area_of_circle(radius):
    return math.pi * radius ** 2
def find_area_of_rectangle(width, height):
    return width * height
def main():
    shape = int(input("Enter 1 for circle, 2 for rectangle: "))
    if shape == 1:
        radius = int(input("Enter radius: "))
        print(f"The area of the circle is {find_area_of_circle(radius)}")
    elif shape == 2:
        width = int(input("Enter width: "))
        height = int(input("Enter height: "))
        print(f"The area of the rectangle is {find_area_of_rectangle(width, height)}")
       
if __name__ == "__main__":
    main()

O código na função main() é o mesmo código que foi incluído diretamente no bloco if __name__ == "__main__" na versão anterior do código.

No Python, a função main() não é necessária como o ponto de entrada principal do programa, ao contrário de outras linguagens de programação. Portanto, o uso de main() e do idioma if __name__ == "__main__" é opcional e só é necessário quando o código se destina a ser usado como um script autônomo e como um módulo.

Outro caso de uso comum para o site if __name__ == "__main__" do Python é o fato de você incluir testes no script. incluir testes no script. Os testes serão executados quando o script for executado diretamente, mas não quando ele for importado de outro módulo. No entanto, embora essa abordagem seja adequada para casos simples, é melhor incluir testes em um módulo separado dedicado a testes.

Conclusão

O if __name__ == "__main__" do Python é útil para incluir código que é executado somente quando um script é executado diretamente, mas não quando é importado. O interpretador Python define a variável __name__ como o nome do módulo se ele for importado e como a string "__main__" se o módulo for o ponto de entrada principal do programa.

Diferentemente de outras linguagens de programação, a função main() e o idioma if __name__ == "__main__" não são um requisito para executar o código Python, mas são uma ferramenta que o programador pode usar quando necessário.

Temas

Principais cursos de engenharia de dados

Track

Data Engineer

57hrs hr
Gain in-demand skills to efficiently ingest, clean, manage data, and schedule and monitor pipelines, setting you apart in the data engineering field.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

tutorial

Como comentar um bloco de código em Python

O uso de comentários é fundamental para trabalhar efetivamente com Python. Neste breve tutorial, aprenda a comentar um bloco de código em Python.
Adel Nehme's photo

Adel Nehme

3 min

tutorial

Tutorial de como executar scripts Python

Saiba como executar um script Python a partir da linha de comando e também como fornecer argumentos de linha de comando ao seu script.
Aditya Sharma's photo

Aditya Sharma

10 min

tutorial

Python New Line: Métodos para formatação de código

Descubra como usar \n para inserir quebras de linha em cadeias de caracteres e instruções print(). Use o parâmetro end para manter a saída em uma única linha. Aprimore suas habilidades de manipulação de arquivos com o os.linesep para gerenciar texto em diferentes sistemas.
Samuel Shaibu's photo

Samuel Shaibu

8 min

tutorial

Dois métodos simples para converter um arquivo Python em um arquivo Exe

Saiba o que é um arquivo executável e por que ele pode ser útil enquanto você analisa como converter um script Python em um executável usando o auto-py-to-exe.
Kurtis Pykes 's photo

Kurtis Pykes

6 min

tutorial

Função do sublinhado (_) no tutorial de Python

Neste tutorial, você aprenderá sobre os usos do sublinhado (_) em python.
Hafeezul Kareem Shaik's photo

Hafeezul Kareem Shaik

8 min

tutorial

Escopo das variáveis em Python

Saiba o que são as miras telescópicas variáveis e familiarize-se com a regra "LEGB". Você também lidará com cenários em que verá as palavras-chave globais e não locais em ação.
Sejal Jaiswal's photo

Sejal Jaiswal

9 min

See MoreSee More