コードは次のとおりです。
#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()
どうやら、上記のコードはエラーなしで実行されるようですが、アクセスされた場所 (in ) の後にbar
inA
も定義されているのに__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
の定義は実行されますよね?