1

私はPythonで一種のスクリプトシステムを構築しようとしています。これにより、Python内で実行時にコードの小さなスニペットを選択して実行できるようになります。

基本的に、次のような小さなPythonファイルをロードできるようにしたい

for i in Foo: #not in a function.
    print i

プログラムのどこかで、Fooがどうなるかを割り当てます。Fooが、単一の関数ではなく、ロードされたpythonファイル全体に対する関数の引数として機能したかのように

だからどこか

FooToPass = GetAFoo ()
TempModule = __import__ ("TheSnippit",<Somehow put {'Foo' : FooToPass} in the locals>)
4

1 に答える 1

2

モジュールレベルで副作用のあるコードを作成するのは悪いスタイルと見なされます。モジュールに何かを実行させたい場合は、そのコードを関数に入れ、Fooこの関数のパラメーターを作成して、目的の値で呼び出します。

Pythonのインポートメカニズムでは、モジュールの名前空間を事前に初期化することはできません。とにかくこれを実行したい場合(私の意見では、混乱して不要です)、インポートメカニズムの詳細をいじる必要があります。実装例(未テスト):

import imp
import sys

def my_import(module_name, globals):
    if module_name in sys.modules:
        return sys.modules[module_name]
    module = imp.new_module(module_name)
    vars(module).update(globals)
    f, module.__file__, options = imp.find_module(module_name)
    exec f.read() in vars(module)
    f.close()
    sys.modules[module_name] = module
    return module
于 2012-07-03T15:24:19.927 に答える