Python中能否通过编程方式获取函数的实际实现代码?
问题解答
结论
可以打印出函数的Python实现代码,你可以用Python标准库自带的inspect模块的getsource()方法实现该需求。
使用示例
针对普通def定义的函数
你可以直接把函数对象传入inspect.getsource(),即可返回完整的函数定义字符串:
import inspect a = 2 b = 1 # 你定义的数学函数 def hyperbolic(x): return a*x + b # 改造后的检查函数(避免和导入的inspect模块重名) def inspect_func(func): print(f"函数名称:{func.__name__}") print("函数实现源码:") print(inspect.getsource(func)) # 调用测试 inspect_func(hyperbolic)
运行后输出结果如下:
函数名称:hyperbolic 函数实现源码: def hyperbolic(x): return a*x + b
针对lambda匿名函数
如果是lambda函数,getsource()会返回lambda定义所在的完整行代码:
hyperbolic_lambda = lambda x: a*x + b inspect_func(hyperbolic_lambda)
运行输出:
函数名称:<lambda> 函数实现源码: hyperbolic_lambda = lambda x: a*x + b
如果你只需要提取核心的数学表达式,可以对拿到的源码字符串做裁剪处理,去掉def声明、缩进、return关键字或者lambda前缀即可。
注意事项
该方法存在以下局限性:
- 仅支持获取Python层面实现的函数的源码,C语言实现的内置函数(比如
len()、sum())无法用该方法获取源码 - 动态生成的函数(比如通过
exec语句、types.FunctionType在运行时构造的函数)没有对应源码文件记录,无法获取源码 - 部分交互式运行环境(比如原生Python shell)中临时定义的函数,可能无法正常获取源码
内容的提问来源于stack exchange,提问作者NMech
相关产品推荐
相关产品推荐

