需求背景
最近在工作上, 遇到了一个比较特殊的需求:
为了安全, 设计一个函数或者装饰器, 然后用户在 "定义/调用" 函数时, 只能访问到我们允许的内置变量和全局变量
通过例子来这解释下上面的需求...a, 只是在globals的返回值上面增加了key-value, 就变相实现了我们定义的操作, 这其实也能用于很多希望能够动态赋值的需求场景!...比如说, 我不确定有多少个变量, 希望通过一个变量名列表, 动态生成这些变量, 在这种情况下, 就能参考这种方法, 不过还是希望谨慎使用, 因为修改了这个, 就是就修改了全局命名空间....好了, 回归到本文, 我们已经知道通过globals函数能够代表全局命名空间, 但是为什么内置命名空间要用globals()['__builtins__'].__dict__来表示?...,
关于代码运行原理, 其实在关键部位的代码, 都已经加了注释, 可能在exec那部分会比较迷惑, 但其实大家将对应的变量代入字符串就能懂了, 替换之后, 其实也就是函数的定义+执行, 可以通过print