たくさんの関数を持つ python モジュールがある場合、次のように言います。
#funcs.py
def foo() :
print "foo!"
def bar() :
print "bar!"
また、文字列から関数のリストを解析し、それらの関数を実行するように設計された別のモジュールがあります。
#parser.py
from funcs import *
def execute(command):
command = command.split()
for c in command:
function = globals()[c]
function()
次に、Python を開いて次の操作を行います。
>>> import parser
>>> parser.execute("foo bar bar foo")
foo!
bar!
bar!
foo!
funcs.py
関数のリストを関数自体として呼び出すことができる便利な関数を追加したいと思います。
#funcs.py (new version)
import parser
def foo() :
print "foo!"
def bar() :
print "bar!"
def parse(commands="foo foo") :
parser.execute(commands)
これで、パーサー自体から再帰的に解析できます。
>>> import parser
>>> parser.execute("parse")
foo!
foo!
>>> parser.execute("parse bar parse")
foo!
foo!
bar!
foo!
foo!
しかし、キー エラーが発生するため、何らかの理由でparse
から実行することはできません。funcs
>>> import funcs
>>> funcs.parse("foo bar")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "funcs.py", line 11, in parse
parser.execute(commands)
File "parser.py", line 6, in execute
function = globals()[c]
KeyError: 'foo'
そのため、行を介してfoo
インポートする必要がありますが、を介して使用されている場合は、の中に見つかりません。これはどのように起こりますか?parser.py
from funcs import *
foo
globals()
parser.py
funcs.py
最後に、インポートしてから(ただしその順序でのみ)期待どおりに機能することを指摘する必要parser
がありfuncs
ます。
>>> import parser
>>> import funcs
>>> funcs.parse("foo bar")
foo!
bar!