我有这样的代码:
globals_defined = {'add': my_add_fn, 'divide': my_divide_fn}
eval_result = eval(<some code>, {data: {'name_1': 'NAME1', 'name_2': 'NAME2'}, globals_defined)
我想在 eval 内部设置一个全局变量,并且之后能够访问它。就像这样:
```javascript eval("var globalVar = 'hello';"); console.log(globalVar); ```
globals_defined = {'add': my_add_fn, 'divide': my_divide_fn, count_iterations: 0}
eval_result = eval(<some code>, {data: {'name_1': 'NAME1', 'name_2': 'NAME2'}, globals_defined)
print 'iterations: ' + str(globals_defined['count_iterations'])
理想情况下,这将打印出 count_iterations 的修改值。在 eval 中,my_add_fn 将执行类似以下的操作以递增它:
def my_add_fn():
global count_iterations
count_terations += 1
return 'blah!'
编辑:我应该先补充一下。是的,我需要使用eval。这个eval最初来自用户输入,但已被解析为抽象语法树,拒绝除少数数学运算外的所有操作。然后,这个AST被使用一些自定义函数定义进行eval。听起来似乎不能以这种方式来实现。