2011年04月03日

mainで使用した値はローカルスコープじゃ無かったのか

コマンドラインのオプション解析器を試していたら、 __main__で宣言した値が別の関数で使える事に気づいた。

ネットで調べてみたら、「if __name__ == "__main__": 」って直接実行時はその後を実行するが、importしたときは実行されないためのガード条件だった。

知らんかった。
つい、C/C++のノリで考えてたよ・・・。

そりゃ関数じゃないのならば、関数にスコープが閉じている訳ないよな。

調査用コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
from __future__ import print_function
import os, sys,glob
from optparse import OptionParser

def test2():
	print(outputFileName)
	x = 2
	print(x)
	
def test1():
	print(outputFileName)
	x = 99
	test2()
	
if __name__ == "__main__":
	parser = OptionParser(version="0.2")
	parser.add_option("-o",
                     action="store",
                     type="string",
                     dest="filename",
                     default=u'test.html',
                     help=u"The output file name is specified.",
                     metavar="FILENAME")		  
	(options, args) = parser.parse_args()
	outputFileName = options.filename
	
	test1()
タグ:Python
posted by MINE at 13:32 | Comment(0) | TrackBack(0) | Python | このブログの読者になる | 更新情報をチェックする | edit
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/193974511
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック