KT.*_*KT. 6 python lookup redefine quoting variable-assignment
假设我需要创建自己的小型 DSL,它将使用 Python 来描述某种数据结构。例如,我希望能够写出类似的东西
f(x) = some_stuff(a,b,c)
Run Code Online (Sandbox Code Playgroud)
并且使用 Python,不要抱怨未声明的标识符或尝试调用函数 some_stuff,而是将其转换为文字表达式以方便我使用。
__getattr__通过创建一个具有正确重新定义和__setattr__方法的类并按如下方式使用它,可以获得对此的合理近似:
e = Expression()
e.f[e.x] = e.some_stuff(e.a, e.b, e.c)
Run Code Online (Sandbox Code Playgroud)
如果能够去掉烦人的“e”,那就太酷了。前缀,甚至可能避免使用 []。所以我想知道,是否有可能以某种方式暂时“重新定义”全局名称查找和分配?与此相关的是,也许有好的软件包可以轻松实现Python表达式的这种“引用”功能?
我不确定这是一个好主意,但我想我应该尝试一下。总结一下:
class PermissiveDict(dict):
default = None
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
return self.default
def exec_with_default(code, default=None):
ns = PermissiveDict()
ns.default = default
exec code in ns
return ns
Run Code Online (Sandbox Code Playgroud)