__name__ == '__main__'
Специальная переменная __name__
не устанавливается пользователем. Он в основном используется , чтобы проверить , является ли модуль в настоящее время работают самостоятельно или работать , потому что import
был выполнен. Чтобы избежать вашего модуля для выполнения определенной части своего кода , когда он импортируется, проверьте , if __name__ == '__main__'
.
Пусть module_1.py быть только одна строка длиной:
import module2.py
И давайте посмотрим , что происходит, в зависимости от module2.py Ситуация 1
module2.py
print('hello')
Запуск module1.py напечатает hello
\ Запуск module2.py напечатает hello
Ситуация 2
module2.py
if __name__ == '__main__':
print('hello')
Запуск module1.py не будет печатать ничего \ Запуск module2.py напечатает hello
function_class_or_module .__ name__
Специальный атрибут __name__
из функции, класса или модуля является строка , содержащая его имя.
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__
атрибут, однако, не имя переменной , которая ссылается на класс, метод или функцию, а это имя , данное ему при определен.
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
Это может быть использовано, среди прочего, для отладки:
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
Использовать в журнале
При настройке встроенного logging
функциональности, общая картина , чтобы создать регистратор с __name__
текущего модуля:
logger = logging.getLogger(__name__)
Это означает, что полное имя модуля будет отображаться в журналах, что упрощает просмотр источника сообщений.