这是代码:
#a.py
ALL_FUNC = [bar, foo] #a list containing all the functions defined in this module
def bar():
pass
def foo():
pass
然后,我像这样运行它: $ python a.py NameError: name 'bar' is not defined
错误意味着,在执行bar
时未定义。但是为什么解释器在模块中ALL_FUNC = [bar, foo]
找不到函数呢?bar
仅仅因为bar
是在ALL_FUNC
?
看这个,这是一个python类,
class A:
def __init__(self):
self.bar()
def bar(self):
pass
a = A()
显然,上面的代码会运行没有任何错误,但是bar
inA
也是在访问它的位置(in __init__
)之后定义的,为什么self.bar()
可以找到没有任何错误?
跟进
这是另一个模块,
#b.py
def bar():
print k #well, apparently this line will result in an error
def foo():
pass
if __name__ == '__main__':
foo()
然后像这样运行,
$ python b.py
没有错误!为什么?bar
应该会导致错误,不是吗?就因为没有在 中使用__main__
,所以没有检测到错误?但是bar
的定义被执行了,对吧?