Python Language                
            __name__特殊変数
        
        
            
    サーチ…
前書き
 __name__特殊変数は、ファイルがモジュールとしてインポートされたかどうかをチェックし、 __name__属性で関数、クラス、モジュールオブジェクトを識別するために使用されます。 
備考
 Pythonの特殊変数__name__は、そのモジュールを含む名前が設定されています。トップレベル(インタラクティブなインタプリタやメインファイルなど)では、 '__main__'設定されています。これは、モジュールがインポートされるのではなく直接実行されている場合に、文のブロックを実行するために使用できます。 
関連する特別な属性obj.__name__は、クラス、インポートされたモジュール、関数(メソッドを含む)で見つけられ、定義されたときにオブジェクトの名前を与えます。 
__name__ == '__main__'
特別な変数__name__はユーザによって設定されていません。主に、モジュールが実行されているかどうか、またはimportが実行されたために実行されているかどうかをチェックするために使用されます。モジュールがインポートされるときにコードの特定の部分を実行しif __name__ == '__main__'にするにはif __name__ == '__main__'かif __name__ == '__main__'確認します。 
module_1.pyを 1行にする:
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__でロガーを作成すること__name__ 。 
logger = logging.getLogger(__name__)
つまり、モジュールの完全修飾名がログに表示され、メッセージがどこから来たのかがわかりやすくなります。