次のコードを検討してください。
aDict = {}
execfile('file.py',globals(),aDict)
aDict['func2']() # this calls func2 which in turn calls func1. But it fails
そしてfile.pyにはこれが含まれています:
def func1():
return 1
myVar = func1() # checking that func1 exists in the scope
func2 = lambda: func1()
これにより、「NameError: global name 'func1' is not defined 」というエラーが発生します。
ここで何が起こっているのかわかりません。file.py
のコードは、空のローカル名前空間で実行されます。
次に、そのコード内で新しい関数が定義され、すぐに正常に呼び出されます。つまり、関数はそのスコープに存在します。
では、なぜfunc1
ラムダ内で呼び出せないのでしょうか?
他の言語では、ラムダ/クロージャーは、それらが定義されているスコープにバインドされます。
Pythonのルールはどうですか? それらはスコープにバインドされていますか? 名前空間に?