Resumo: neste tutorial, você aprenderá sobre a variável __name__
Python e como usá-la efetivamente em módulos.
O que é a variável __name__
do Python?
Se você passou por algum código Python, provavelmente já viu a variável __name__
como a seguinte:
if __name__ == '__main__':
main()
E você pode se perguntar qual é o valor da variável __name__
.
Como a variável __name__
tem sublinhados duplos em ambos os lados, ela é chamada de nome dunder. O dunder significa double under scores.
A __name__
é uma variável especial em Python. É especial porque o Python atribui um valor diferente a ele, dependendo de como o script que o contém é executado.
Quando você importa um módulo, o Python executa o arquivo associado ao módulo.
Frequentemente, você deseja escrever um script que possa ser executado diretamente ou importado como um módulo. A variável __name__
permite que você faça isso.
Quando você executa o script diretamente, o Python define a variável __name__
como '__main__'
.
No entanto, se você importar um arquivo como um módulo, o Python definirá o nome do módulo para a variável __name__
.
__name__
Exemplo de variável Python
Primeiro, crie um novo módulo chamado billing
que tenha duas funções: calculate_tax()
e print_billing_doc()
. Além disso, adicione uma instrução que imprima a variável __name__
na tela:
def calculate_tax(price, tax):
return price * tax
def print_billing_doc():
tax_rate = 0.1
products = [{'name': 'Book', 'price': 30},
{'name': 'Pen', 'price': 5}]
# print billing header
print(f'Name\tPrice\tTax')
# print the billing item
for product in products:
tax = calculate_tax(product['price'], tax_rate)
print(f"{product['name']}\t{product['price']}\t{tax}")
print(__name__)
Em segundo lugar, crie um novo arquivo chamado app.py
e importe o módulo billing
:
import billing
Ao executar o app.py
:
> python app.py
…a variável __name__
mostra o seguinte valor:
billing
Isso significa que o Python executa o arquivo billing.py
quando você importa o módulo de cobrança para o arquivo app.py
.
A variável __name__
no app.py
para o nome do módulo que é billing
.
Se você executar o billing.py
como um script diretamente:
> python billing.py
… você verá a seguinte saída:
__main__
Neste caso o valor da variável __name__
está '__main__'
dentro do billing.py
.
Portanto, a variável __name__
permite verificar quando o arquivo é executado diretamente ou importado como um módulo.
Por exemplo, para executar a função print_billing_doc()
quando billing.py
é executado diretamente como um script, você pode adicionar a seguinte instrução ao módulo billing.py
:
if __name__ == '__main__':
print_billing_doc()
Em terceiro lugar, execute o billing.py
como um script, você verá a seguinte saída:
Name Price Tax
Book 30 3.0
Pen 5 0.5
No entanto, ao executar o app.py
, você não verá o bloco if
executado porque a variável __name__
não está definida como '__main__'
mas 'billing'
.
Resumo
- O Python atribui
'__main__'
à variável__name__
quando você executa o script diretamente e o nome do módulo se você importar o script como um módulo.