Python Language
La variabile speciale __name__
Ricerca…
introduzione
La variabile speciale __name__
viene utilizzata per verificare se un file è stato importato come modulo o meno e per identificare una funzione, classe, oggetto modulo con il loro attributo __name__
.
Osservazioni
La variabile speciale Python __name__
è impostata sul nome del modulo contenitore. Al livello più alto (come nell'interprete interattivo o nel file principale) è impostato su '__main__'
. Questo può essere usato per eseguire un blocco di istruzioni se un modulo viene eseguito direttamente anziché importato.
L'attributo speciale correlato obj.__name__
si trova su classi, moduli e funzioni importati (compresi i metodi) e fornisce il nome dell'oggetto quando definito.
__name__ == '__main__'
La variabile speciale __name__
non è impostata dall'utente. Viene in gran parte utilizzato per verificare se il modulo viene eseguito da solo o eseguito perché è stata eseguita import
. Per evitare che il tuo modulo esegua determinate parti del suo codice quando viene importato, controlla if __name__ == '__main__'
.
Lascia che module_1.py sia lungo una sola riga:
import module2.py
E vediamo cosa succede, a seconda del modulo2.py
Situazione 1
module2.py
print('hello')
L'esecuzione di module1.py stamperà hello
Eseguendo module2.py verrà stampato hello
Situazione 2
module2.py
if __name__ == '__main__':
print('hello')
L'esecuzione di module1.py non stampa nulla
Eseguendo module2.py verrà stampato hello
function_class_or_module .__ name__
L'attributo speciale __name__
di una funzione, classe o modulo è una stringa che contiene il suo nome.
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
L'attributo __name__
non è, tuttavia, il nome della variabile che fa riferimento alla classe, al metodo o alla funzione, piuttosto è il nome che gli viene dato quando definito.
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
Questo può essere usato, tra gli altri, per il debug:
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
Utilizzare nella registrazione
Quando si configura la funzionalità di logging
incorporata, uno schema comune è creare un logger con __name__
del modulo corrente:
logger = logging.getLogger(__name__)
Ciò significa che il nome completo del modulo apparirà nei log, rendendo più facile vedere da dove vengono i messaggi.