如何确定函数是使用函数名调用的,还是通过该函数的别名调用的?你知道吗
我可以通过执行以下操作来检查函数以从函数体中获取其名称:
import inspect
def foo():
print(inspect.stack()[0][3])
foo() # prints 'foo'
资料来源:Determine function name from within that function (without using traceback)
但是,如果我对函数使用别名并尝试相同的操作,则会得到原始函数名(而不是别名)
bar = foo
bar() # prints 'foo'
我希望能够做到以下几点:
def foo():
print(... some code goes here ...)
bar = foo
foo() # prints 'foo'
bar() # prints 'bar'
基于我对你的问题范围的有限了解,这是可行的:
结果:
我有一个(有点黑)的解决方案,它依赖正则表达式从字符串中解析函数名。可能会有一个更干净的解决方案,但至少用这个是我能找到的最好的。你知道吗
简要说明:首先,我抓取调用的inspect框架,该框架导致对该函数的调用。然后,我从这个框架中提取实际的调用字符串,并对这个调用字符串应用regex,它只给出函数名。你知道吗
注意:在解释器shell中,inspect的行为不同,我上面的代码产生错误,因为我的regex不能匹配实际的函数名。@user2357112在对这个问题的评论中指出了一个额外的警告:一个调用直接绑定到一个名称并不明显,如
当从脚本运行时,我的解决方案将正确处理简单的重命名案例(如本问题中给出的案例),但我不主张使用它,因为上面提到的拐角案例会导致混淆错误。你知道吗
相关问题 更多 >
编程相关推荐