Python Language
De speciale variabele __name__
Zoeken…
Invoering
De speciale variabele __name__
wordt gebruikt om te controleren of een bestand is geïmporteerd als een module of niet, en om een functie, klasse, __name__
te identificeren aan de __name__
kenmerk __name__
.
Opmerkingen
De speciale variabele __name__
Python is ingesteld op de naam van de bevattende module. Op het hoogste niveau (zoals in de interactieve tolk of in het hoofdbestand) is deze ingesteld op '__main__'
. Dit kan worden gebruikt om een blok instructies uit te voeren als een module rechtstreeks wordt uitgevoerd in plaats van geïmporteerd.
Het gerelateerde speciale kenmerk obj.__name__
wordt gevonden in klassen, geïmporteerde modules en functies (inclusief methoden) en geeft de naam van het object wanneer gedefinieerd.
__name__ == '__main__'
De speciale variabele __name__
wordt niet ingesteld door de gebruiker. Het wordt meestal gebruikt om te controleren of de module op zichzelf wordt uitgevoerd of omdat een import
is uitgevoerd. Om te voorkomen dat uw module bepaalde delen van de code uitvoert wanneer deze wordt geïmporteerd, controleert u if __name__ == '__main__'
.
Laat module_1.py slechts één regel lang zijn:
import module2.py
En laten we kijken wat er gebeurt, afhankelijk van module2.py
Situatie 1
module2.py
print('hello')
Het uitvoeren van module1.py zal hello
afdrukken
Het uitvoeren van module2.py zal hello
afdrukken
Situatie 2
module2.py
if __name__ == '__main__':
print('hello')
Het uitvoeren van module1.py zal niets afdrukken
Het uitvoeren van module2.py zal hello
afdrukken
function_class_or_module .__ name__
Het speciale kenmerk __name__
van een functie, klasse of module is een tekenreeks die de naam bevat.
import os
class C:
pass
def f(x):
x += 2
return x
print(f)
# <function f at 0x029976B0>
print(f.__name__)
# f
print(C)
# <class '__main__.C'>
print(C.__name__)
# C
print(os)
# <module 'os' from '/spam/eggs/'>
print(os.__name__)
# os
Het kenmerk __name__
is echter niet de naam van de variabele die verwijst naar de klasse, methode of functie, het is eerder de naam die eraan is gegeven wanneer deze is gedefinieerd.
def f():
pass
print(f.__name__)
# f - as expected
g = f
print(g.__name__)
# f - even though the variable is named g, the function is still named f
Dit kan onder andere worden gebruikt voor het opsporen van fouten:
def enter_exit_info(func):
def wrapper(*arg, **kw):
print '-- entering', func.__name__
res = func(*arg, **kw)
print '-- exiting', func.__name__
return res
return wrapper
@enter_exit_info
def f(x):
print 'In:', x
res = x + 2
print 'Out:', res
return res
a = f(2)
# Outputs:
# -- entering f
# In: 2
# Out: 4
# -- exiting f
Gebruik in logboekregistratie
Het configureren van de ingebouwde logging
functionaliteit, een gemeenschappelijk patroon is een logger het creëren __name__
van de huidige module:
logger = logging.getLogger(__name__)
Dit betekent dat de volledig gekwalificeerde naam van de module in de logboeken wordt weergegeven, zodat u gemakkelijker kunt zien waar berichten vandaan komen.