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

Введение

Примеры

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

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

Синтаксис

Параметры

Примечания