當我嘗試運行使用runpy模塊加載的文件中定義的方法時,出現意外的行爲。這些方法看不到在該方法外定義的任何變量(包括導入的模塊)。這裏是我正在做它:閉包如何在runpy中工作?
#test.py
import runpy
env = runpy.run_path('test', {'y':'world'})
env['fn']()
〜
#test
import re
print(re.compile(r'^hello', re.IGNORECASE).sub('', "hello world"))
x = "hello"
print(x)
print(y)
def fn():
try:
print(re.compile(r'^hello', re.IGNORECASE).sub('', "hello world"))
except:
print("No re")
try:
print(x)
except:
print("No x")
try:
print(y)
except:
print("No y")
我預計test.py的輸出爲:
world
hello
world
world
hello
world
因爲FN將構成重新封閉,X和y。
但是,相反,我得到:
world
hello
world
No re
None
None
看起來再沒有即使它應該是正常的閉合行爲FN內定義。 x和y更加陌生,因爲它們看起來是被定義的,但被設置爲None。
爲什麼會這樣以及閉包如何與runpy一起工作?我如何實現正常行爲,使fn能夠「看到」外部變量?