Python Language
Specialvariabeln __name__
Sök…
Introduktion
__name__
används för att kontrollera om en fil har importerats som en modul eller inte, och för att identifiera ett funktions-, klass-, __name__
deras __name__
.
Anmärkningar
Pythons specialvariabel __name__
är inställd på namnet på den innehållande modulen. På den översta nivån (som i den interaktiva tolkarna eller i huvudfilen) är den inställd på '__main__'
. Detta kan användas för att köra ett block med uttalanden om en modul körs direkt snarare än att importeras.
Det relaterade specialattributet obj.__name__
finns på klasser, importerade moduler och funktioner (inklusive metoder) och ger objektets namn när det definieras.
__name__ == '__main__'
Den speciella variabeln __name__
inte in av användaren. Det används mest för att kontrollera om modulen körs av sig själv eller körs eftersom en import
utfördes eller inte. Kontrollera if __name__ == '__main__'
att undvika att din modul kör vissa delar av sin kod när den importeras.
Låt module_1.py vara bara en rad lång:
import module2.py
Och låt oss se vad som händer beroende på module2.py
Situation 1
module2.py
print('hello')
Kör module1.py kommer att skriva ut hello
Att köra module2.py kommer att skriva ut hello
Situation 2
module2.py
if __name__ == '__main__':
print('hello')
Att köra module1.py skriver ingenting
Att köra module2.py kommer att skriva ut hello
function_class_or_module .__ name__
Det speciella attributet __name__
för en funktion, klass eller modul är en sträng som innehåller dess namn.
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
__name__
är dock inte namnet på den variabel som hänvisar till klassen, metoden eller funktionen, utan det är namnet som ges till det när det definieras.
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
Detta kan bland annat användas för felsökning:
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
Använd i loggning
När du konfigurerar den inbyggda logging
är ett vanligt mönster att skapa en logger med __name__
för den aktuella modulen:
logger = logging.getLogger(__name__)
Detta innebär att modulens fullt kvalificerade namn kommer att visas i loggarna, vilket gör det lättare att se var meddelanden kommer från.