__name__ == "__main__"って何やってるの?

このエントリーをはてなブックマークに追加

質問:

if __name__ == "__main__": ってこの場合で何やってるの?

# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while 1:
lock.acquire()
time.sleep(sleeptime)
lock.release()
time.sleep(sleeptime)
if __name__ == "__main__":
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))

By Devoted | 質問日時: Jan 7 ‘09 at 4:11



回答1:

Pythonインタプリタがソースファイルを読み込むと、ファイル内のすべてのコードが実行される。

コードを実行する前に、いくつかの特殊変数を定義するんだ。たとえば、Pythonインタプリタがそのモジュール(=ソースファイル)を
メインプログラムとして走らせているとすると、特殊な __name__変数を値" __main __ "として設定する。このファイルが別のモジュールからインポートされている場合は、 __name__はモジュールの名前に設定されるってわけなんだ。

君のスクリプトの場合、それがメインとして実行されていると仮定しよう。で、例えば、コマンドラインでこう呼び出したとする:

python threading_example.py

特殊変数を設定した後、import文を読み込み、それらのモジュールをロードする。次に、 defブロックを評価し、
関数オブジェクトの作成とそれを指しているmyfunctionという変数の作成を行う。
その後、if文を読み込み、__name__"__main __"と等しいことを知り、その中のブロックを実行する。

One reason for doing this is that sometimes you write a module (a .py file) where it can be executed directly. Alternatively, it can also be imported and used in another module. By doing the main check, you can have that code only execute when you want to run the module as a program and not have it execute when someone just wants to import your module and call your functions themselves.

これを行う1つの理由は、直接実行することができるモジュール(.pyファイル)を時々書く必要があるから、って言う理由。それ以外の時はインポートして、他のモジュールとして使うこともできる。メイン関数のチェックを行うことで、そのモジュールをプログラムとして実行したい時にのみ実行されるコードを持つことができるし、また、誰かがあなたのモジュールをインポートしてあなたの関数を呼び出そうとしているときは実行されない。

詳しくはこのページを参照してみて。

By Mr Fooz | 回答日時: Jan 7 ‘09 at 4:26



Source: What does if name == “main”: do?

共有 コメント