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

如何为f-string的'='调试运算符传递变量以获取外部原变量名

问题原因

f-string的=调试运算符只会捕获当前作用域的变量名,你代码中的var是print_var函数的形参,属于函数内部作用域,因此打印时只会输出var = 5,无法直接获取外部调用时的实参变量名。

实现方案

方案1:关键字参数传递(无依赖、兼容性强)

通过关键字参数的键名直接获取变量名,不需要复杂逻辑,稳定性高:

from datetime import datetime

def print_var(**kwargs):
    print(str(datetime.now())[:19], end=' ')
    var_name, var_value = next(iter(kwargs.items()))
    print(f'{var_name} = {var_value}')

test = 5
# 调用传参格式为 变量名=变量名
print_var(test=test)

如果使用Python3.10及以上版本,调用可以简化为print_var(test=),效果完全一致。

方案2:调用栈自动解析(调用更简便)

如果不想修改调用格式,可通过inspect模块解析调用栈的代码上下文,自动提取实参变量名:

from datetime import datetime
import inspect
import ast

def print_var(var):
    print(str(datetime.now())[:19], end=' ')
    # 获取调用方的栈帧和对应代码
    call_frame = inspect.currentframe().f_back
    call_code = inspect.getframeinfo(call_frame).code_context[0].strip()
    # 解析代码提取实参变量名
    var_name = ast.parse(call_code, mode='eval').body.args[0].id
    print(f'{var_name} = {var}')

test = 5
# 调用不需要修改格式,直接传变量即可
print_var(test)

注意:该方案仅支持传入单个变量的场景,若传入字面量、表达式等内容会出现解析错误。


内容的提问来源于stack exchange,提问作者OneArb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:09:02