【发布时间】:2010-06-24 21:28:42
【问题描述】:
我想在不同的模块中有一个函数,当被调用时,它可以访问它的调用者可以访问的所有变量,并且就像它的主体被粘贴到调用者而不是拥有自己的上下文一样,基本上就像一个 C 宏而不是一个普通的函数。我知道我可以将 locals() 传递给函数,然后它可以将局部变量作为 dict 访问,但我希望能够正常访问它们(例如 x.y,而不是 x["y"] 并且我想要所有名称调用者不仅可以访问本地变量,还可以访问“导入”到调用者文件中但不能导入到包含函数的模块中的内容。
这有可能实现吗?
编辑 2 这是我能想到的最简单的示例,说明我真正想做的事情:
def getObj(expression)
ofs = expression.rfind(".")
obj = eval(expression[:ofs])
print "The part of the expression Left of the period is of type ", type(obj),
问题是'表达式'需要调用者的导入和局部变量才能无错误地进行评估。实际上,不仅仅是一个评估,所以我试图避免只传递本地人的解决方案( ) 一直到 eval() ,因为这不能解决我的一般情况问题。
【问题讨论】:
-
是的,您可以这样做,但您可能不应该出于同情下一个阅读您的代码的人而添加神秘的语言功能。最好不要使用 C 预处理器宏是有原因的:它们以神秘的方式改变语言。
-
您应该询问问题,而不是(很好地说)不寻常解决方案。
-
@THC4k- 5000 英尺视图是我几周前发布的这个问题,但没有引起任何关注:stackoverflow.com/questions/3027307/… 我正在尝试为该问题提供一般案例解决方案
标签: python namespaces inline