python打印文字加变量的值,python怎么定义字符变量
Aa=1print(aa)输出结果:
当使用print简单地打印变量时,只会显示与变量名对应的值,而不会打印变量名。我们如何打印变量名呢?
python中内置的locals()是打印变量名的关键。
Aa=1print(locals())输出结果:
{. aa: 1, _ _ name _ _: _ _ main _ , _ _ spec _ _ :无,}你可以看到这个字典中保存了变量aa的名字,所以我们可以通过逐个检查字典的值是否与变量AA所指向的值相同来得到变量名。话不多说,
def var_name(var,all_var=locals()):返回[var _ name for var _ name in all _ var if all _ var[var _ name]is var][0]aa=11bb=22cc=33dd=44 Print(var _ name(aa))Print(var _ name(bb))Print(var _ name(cc))Print(var _ name(DD))Print(var _ name(DD))输出结果:
Aabbccdd在函数头中使用locales()作为默认参数,得到的字典是外部局部变量参数字典(新发现的,呵呵呵)。
但是这样会有一个问题,就是当多个变量名指向同一个值时,会混淆错误的名字。
def var_name(var,All _ var=locales()):return[var _ name for var _ name in All _ var if All _ var[var _ name]isvar][0]aa=bb=11cc=DD=22 print(var _ name(aa))print(var _ name(bb))print
Bbbbcccc,所以只能在变量值只被引用一次的情况下使用。
在stackoverflow上找到的最终解决方案
import inspect,redef varname(p):用于inspect . get frame info(inspect . current frame()中的行。f _ back)[3]:m=re . search(r \ bvar name \ S * \(\ S *[a-za-z _][a-za-z0-9 _]*)\ S * \ ,line)if m:return m . group(1)spam=42 print(varname(spam))输出结果:
垃圾邮件原理:变量名是通过检查调用varname所在行的代码字符串得到的。
参考资料:
stackoverflow的解决方案
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。