如何打印Python中partial偏函数对应的原函数名称?
获取partial偏函数的原函数名称用于重试日志输出
当你用functools.partial包装函数后,直接打印partial对象只会显示内存地址,要获取原函数名称,有两种简单可行的方法:
方法1:直接访问partial的__func__属性
partial对象内置了__func__属性,它指向被包装的原始函数,再通过__name__就能拿到函数名:
from functools import partial def function_a(): raise Exception("模拟执行失败") def function_b(): raise Exception("模拟执行失败") # 待重试的partial函数列表 retry_tasks = [partial(function_a), partial(function_b, some_arg="test")] for task in retry_tasks: # 提取原函数名称 original_func_name = task.__func__.__name__ print(f"Now running function: {original_func_name}") try: task() except Exception as e: print(f"函数 {original_func_name} 执行失败,将加入重试队列")
不管partial有没有绑定额外参数,__func__都会准确指向原函数,完全满足你的重试日志需求。
方法2:用inspect模块(更通用的场景)
如果你的函数存在多层装饰器或复杂包装的情况,用inspect.getoriginalfunction()方法能更稳妥地获取最原始的函数:
import inspect from functools import partial def function_a(): pass # 包装成partial partial_task = partial(function_a) # 获取原始函数 original_func = inspect.getoriginalfunction(partial_task) print(f"Now running function: {original_func.__name__}")
这个方法不仅适用于partial,对其他包装类的函数对象也能生效,扩展性更强。
内容的提问来源于stack exchange,提问作者Jelle
相关产品推荐
相关产品推荐

