Документация по Python

Специальная переменная __name__

В: Документация по Python

__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__)

Это означает, что полное имя модуля будет отображаться в журналах, что упрощает просмотр источника сообщений.

Еще от кодкамп
Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.