def calcCycleOffset():
global cycleOffset, uc, cs
cycleOffset = uc - cs
return cycleOffset
def vir_main():
calcCycleOffset()
vir_main()
#calcCycleOffset()
print( "vir.py: cycleOffset: ", cycleOffset )
filename = "./vir.py"
vir_globals = { "uc": 42, "cs": 12, "cycleOffset": -1 }
with open(filename, "rb") as source_file:
code = compile(source_file.read(), filename, "exec")
exec(code, vir_globals, {} )
print( 'exec: globals.cycleOffset', vir_globals['cycleOffset'] )
这个模式失败了。
Traceback (most recent call last):
File "exec.py", line 7, in <module>
exec(code, vir_globals, {} )
File "./vir.py", line 12, in <module>
vir_main()
File "./vir.py", line 9, in vir_main
calcCycleOffset()
NameError: name 'calcCycleOffset' is not defined
然而,函数 calcCycleOffset() 是 python 所知道的。如果你把 vir.py 中的注释从:
vir_main()
#calcCycleOffset()
换成:
#vir_main()
calcCycleOffset()
那么这个函数就会被调用。
我希望能够在 vir.py 文件中在函数中嵌套函数,并且仍然能够动态执行......
HELP !
谢谢
正如这里的官方文档中所解释的关于 当地人 对象。https:/docs.python.org3.8libraryfunctions.html#locals。
注 : 这个字典的内容不应该被修改;修改可能不会影响解释器使用的局部变量和自由变量的值。
而你在这里传递了一个空对象作为locals。
在你的执行文件中,请将你的代码改为.NET。
filename = "./vir.py"
vir_globals = { "uc": 42, "cs": 12, "cycleOffset": -1 }
with open(filename, "rb") as source_file:
code = compile(source_file.read(), filename, "exec")
exec(code, vir_globals) #remove the empty object here !!
print( 'exec: globals.cycleOffset', vir_globals['cycleOffset'] )
并且它应该向技巧
你也可以看看@thefourtheye的这个问题和出色的回答。在Python 3中使用一个在执行的字符串中定义的函数。