如果我有一个包含很多函数的 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
from 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
导入,我也没有找到它何时使用 through 。这怎么可能发生?parser.py
from funcs import *
foo
globals()
parser.py
funcs.py
我最后应该指出,导入parser
然后funcs
(但仅按此顺序)允许它按预期工作:
>>> import parser
>>> import funcs
>>> funcs.parse("foo bar")
foo!
bar!