给定以下代码
a = 100
b = 200
snip = '''
c = a+b
'''
exec(snip)
print(c)
如何将值传递到exec,并从exec中获取值,而不使用全局作用域?实际上,我希望能够显式地控制exec
访问的整个范围。
一般来说,全局作用域与exec一起使用
a = 100
b = 200
snip = '''
c = a+b
'''
exec(snip)
print(c)
然而,这在某些用例中可能会有问题。exec
允许您传入定义全局和局部作用域的字典。下面是一个例子:
snip = '''
c = a+b
'''
input_globals = {'a': 100, 'b': 2}
output_locals = {}
exec(snip, input_globals, output_locals)
print(output_locals)
结果如下:
{'c': 102}
这有效地允许一个人使用exec与它自己的作用域,而不需要工作和修改全局作用域。
你可以阅读这篇文章了解更多细节。