如何为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
相关产品推荐
相关产品推荐

