« 暑いような、暑くないような、、。 | トップページ | ちょっと怖い?、、東名 »

2009年8月12日 (水)

Python(失敗事例) execfileでの変数スコープ

2009-08-12(水)曇り、時々晴

 直ぐ忘れるので自分用のメモとして、Pythonでの失敗事項やこんなノウハウが必要だった、、ということを書いていこうと思います。そして、以前に書いたのも含めて、「Pythonスクリプト雑記」にブログ記事へのリンク集を作ろうと思います。
 なんせ、最近は忘れるのが速くて、、、検索や置換のやり方まで直ぐ忘れますし、昨日の朝食どころか昨日の夕食、ひどいときは今日の朝食に何を食べたかさえ思い出せない事があったりして、、、。

 さて、話を戻すと、「スクリプトからexecfileで他のスクリプトを起動したときの、変数のスコープに注意」という点です。
 具体的に言うと、起動する側とされる側のトップレベルにある変数のスコープ(有効範囲)は同一であり、同じ名前があると置き換わってしまいます

 じつは、execfileで他のスクリプトを起動したときは、OSで言えば 「子プロセスで実行されて、変数領域は重ならない」 と思っていましたが、、実は違いました。きちんと調べて使うべきでした。「初めてのPython」(オライリー社刊)を読み始めたら51ページにはっきりとかいてありました。
「毎回、execfileが呼び出された箇所に、モジュールファイルの内容をペーストしたのと同一です。そして、変数が書き換えられる恐れもあります。」でした。

図で書くと下図のようなイメージでしょうか。

Ex_execfile_2 

 今までのスクリプトで言うと「PyMyShell」と「Filebrowser」で使用しています。一度、「Filebrowser」でその問題に遭遇して手直ししているのですが、今回ほどはっきりと認識していませんでした。
 現在では、それほど深刻な変数は定義していない(スクリプト名とかバージョンなどを定義している)ので良いのですが、「情報」で見たときにスクリプト名やバージョンが違っているという、恥ずかしい結果になります。

 ということで、またまた「PyMyShell」と「Filebrowser」の手直しをしています。

 

|

« 暑いような、暑くないような、、。 | トップページ | ちょっと怖い?、、東名 »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/45908733

この記事へのトラックバック一覧です: Python(失敗事例) execfileでの変数スコープ:

« 暑いような、暑くないような、、。 | トップページ | ちょっと怖い?、、東名 »