问题描述
如果我有一个存储在变量中的函数名称,如何在函数内部知道用于调用它的变量的名称?
例如:
var_name = function1 var_name("3") def function1(self,params=""): print("the parameter is " + params + "called by" + VARIABLENAME)
我会有类似的输出
该参数为3,由var_name调用
感谢支持
解决方法
不幸的是,您无法在python上执行此操作,但是您可以执行以下操作来获取当前函数:
import inspect
def function1(n):
print("the parameter is " + n + " called by " + inspect.getframeinfo(inspect.currentframe()).function)
function1("3")
,
您可以标识调用函数,并使用globals()
查找所有定义的函数:
import inspect
import types
def function1(n):
alias = getCallingAliases(inspect.getframeinfo(inspect.currentframe()).function)
print("the parameter is " + n + " called by " + alias)
def getCallingAliases(realFn):
for k,v in globals().items():
if isinstance(v,types.FunctionType):
# k == function or alias
# v == original function
aliasName = v.__name__
if realFn != k and realFn == aliasName:
return k
return '<unknown>'
var_name = function1
var_name("3")
出局:
the parameter is 3 called by var_name
注意:这不容易出错,可能需要根据您的需要进行调整(关于类,从其他模块导入的功能……)