【发布时间】:2021-06-21 09:40:07
【问题描述】:
我有很多类似下面的函数,根据参数的类型递归地调用自己来获得一个或多个返回:
def get_data_sensor(self, sensorname):
if isinstance(sensorname, list):
return [get_data_sensor(self, sensor) for sensor in sensorname]
return get_data(os.path.join(self.get_info("path"), "{0}.npy".format(sensorname)))
我想递归调用我的函数而不必知道我当前的函数名,我不想在代码中使用两次我的函数名来限制复制粘贴错误。
Determine function name from within that function (without using traceback) 展示了如何获取实际的函数名,但我需要函数本身来调用它。
【问题讨论】:
-
这真的是一个需要解决的问题……吗?
-
你是如何使用
sys._getframe的?还考虑到递归调用是在函数本身内部定义的,这是什么时候出现的问题? -
如果你说你有这么多的复制粘贴代码,你应该重新考虑你到底在做什么,也许改写一个通用的高阶函数。
-
是的,你可以用装饰器简单地抽象它;函数本身只需要包含处理标量情况(字符串)的代码,装饰器将通过使用字符串(标量)调用包装函数一次或为列表中的每个项目(向量)调用一次包装函数来处理这两种情况.如果您不熟悉装饰器,请参阅stackoverflow.com/a/1594484/3001761。
-
我还建议阅读meta.stackexchange.com/q/66377/248731 - 在这种情况下,您提供的用于说明您正在努力解决的解决方案的示例与您试图解决的实际问题几乎没有关系。