比如说,我有一段非常简单的代码
py = """
a = 1
print (f'before all {a=}')
def bar(n):
print(f'bye {n=}')
def foo(n):
print(f'hello {n=}')
bar(n)
bar ('just works')
foo ('sara')
"""
loc = {}
glo = {}
bytecode = compile(py, "script", "exec")
exec(bytecode, glo, loc)
如您所见,我定义了两个函数:bar
&;foo
,并使用结果调用了这两个函数:
before all a=1
bye n='just works'
hello n='sara'
Traceback (most recent call last):
File "/home/bla-bla/pythonProject/main_deco2.py", line 43, in <module>
exec(bytecode, glo, loc)
File "script", line 13, in <module>
File "script", line 10, in foo
NameError: name 'bar' is not defined
这让我很困惑,因为我不明白为什么函数foo
看不到bar
,而就在一秒钟前,我还可以毫无问题地调用bar
?