需求背景
最近在工作上, 遇到了一个比较特殊的需求:
为了安全, 设计一个函数或者装饰器, 然后用户在 "定义/调用" 函数时, 只能访问到我们允许的内置变量和全局变量
通过例子来这解释下上面的需求...引入别的模块, 然后再执行模块中的方法, 也是可行的!...2.控制好`内置命名空间`和`全局命名空间`, 使其只能用允许使用的内容
在方案1, 其实也是我们最容易想到的方法, 但是这个方法的成本还是比较高, 因为我们需要将可能出现的错误代码或者关键词,全部写成一套规则...具体实现
实现方案2最大的问题就是, 如何控制内置命名空间 和全局命名空间
我们第一个想法肯定就是覆盖它们, 因为我们都知道不管是内置命名空间还是全局命名空间, 都是通过字典的形式在维护:
print...其实这个和python自身的机制有关, 因为模块在编译和初始化的过程中, 内置命名空间就是以这种形式,寄放在全局命名空间:
static void
initmain(void)
{
PyObject