You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何在函数内获取未求值的原始输入表达式内容

实现方案

核心思路是通过inspect模块获取函数调用位置的源代码,从中提取传入的未求值表达式文本,无需改动函数调用方式,仅修改hello函数即可。

完整实现代码

import inspect
import re

def hello(*_):
    # 获取调用栈的上一帧,即调用hello的位置
    stack = inspect.stack()
    try:
        # 读取调用行的原始代码
        call_code = stack[1].code_context[0].strip()
        # 正则匹配hello(...)括号内的所有内容
        match = re.search(r'hello\((.*)\)', call_code)
        if match:
            # 去除首尾空白后返回
            return match.group(1).strip()
        return ""
    finally:
        # 手动删除栈帧引用避免内存泄漏
        del stack

效果验证

# 测试用例(a、b变量是否定义不影响返回结果,因为我们直接取的原始代码文本)
print(hello(a == 1))  # 输出: a == 1
print(hello(b == 1))  # 输出: b == 1
print(hello(a == 2))  # 输出: a == 2

注意事项

  • 如果同一行有多个hello调用,或者调用跨越多行,需要调整正则匹配逻辑适配场景
  • 该实现依赖源代码可读取,在交互式环境、打包后的无源码环境下无法正常工作

内容的提问来源于stack exchange,提问作者김도훈

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:02