メモ その3 コードオブジェクト
こじんメモ
コードオブジェクト
コンパイル
module(import)を使わずに自前でキャッシュする。
(dirに__init__.pyがなくても取り込める)
cache = {} path = "test.py" source = file.open(path).read() cd = compile(source, '<string>', 'exec') #codeをキャッシュ cache[path] = cd locals = dict(test={}) exec cd in {},locals
とりあえずファイルなのでkindは"exec"。
走らせたいコードのソースからの値の受け渡しはlocalsを使う.。
(走らせたいコードのソースではtestは既に宣言済みの扱い。)
execには一応、globals、locals両方渡すけどglobalsは捨てなので空辞書。
後はコードキャッシュがあるかないかチェックすればOKかな。
うくく。