Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

メモ その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かな。
うくく。