「if __name__ == '__main__':」について

「if __name__ == '__main__':」内は,main文として扱う時だけ実行する.
これの外にある文は,importするだけでも実行されてしまうので注意.
下記のようなhoge.pyがあるとする.

import numpy as np

# def
def testf(x,y):
    ''' test '''
    val  = x**y
    return val 

# ①importでも実行する
x,y = 2,3
z = testf(x,y)
print 'z = '+str(z)

# ②main文として扱う場合だけ実行
if __name__ == '__main__':
    x,y = 3,2
    z = testf(x,y)
    print 'z = '+str(z)

これを

python hoge.py

で実行すると

z = 8
z = 9

のように,zが①と②の両方で算出される.
importした時は①だけ.
importでは,関数を呼び出す以外の処理はおそらく望ましくなく,バグに繋がる可能性も考えられるため,原則的に①の部分にmain文のようなものは含めない.

以下のように,main文も関数にし,main()を実行させるものが多い.

def main():
    (mainの記述)
if __name__ == '__main__':
    main()

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2017-11-08 (Wed) 12:22:24 (2358d)