gpt4 book ai didi

python - 像调用内联函数一样调用 python 函数

转载 作者:行者123 更新时间:2023-11-28 20:11:32 25 4
gpt4 key购买 nike

我想在不同的模块中有一个函数,当被调用时,它可以访问其调用者可以访问的所有变量,并且就像它的主体已粘贴到调用者而不是拥有自己的上下文一样运行,基本上像 C 宏而不是普通函数。我知道我可以将 locals() 传递给函数,然后它可以将局部变量作为字典访问,但​​我希望能够正常访问它们(例如 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(),因为这不能解决我的一般情况问题。

最佳答案

还有一种更丑陋的方法——请不要这样做,即使可能——

import sys

def insp():
l = sys._getframe(1).f_locals
expression = l["expression"]
ofs = expression.rfind(".")
expofs = expression[:ofs]
obj = eval(expofs, globals(), l)
print "The part of the expression %r Left of the period (%r) is of type %r" % (expression, expofs, type(obj)),

def foo():
derp = 5
expression = "derp.durr"
insp()

foo()

输出

The part of the expression 'derp.durr' Left of the period ('derp') is of type (type 'int')

关于python - 像调用内联函数一样调用 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3114015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com