python可以接受的变量名_python如何获取变量的变量名

假设现在存在一个值为1变量名为a的变量,如何通过一个函数获取该变量的变量名a?

上面这个需求来源于某群友的一个要求,希望能有一个这样的函数来方便打印。

0069Secoly1fmmkw7stttj30kp03n744.jpg

这个需求很扯淡啊,为什么不用格式化输出?它回复到‘懒’,好吧,懒确实是程序员技术进步的第一推动力。

从变量名获取变量值

当时第一个想法,从变量获取变量名是相当麻烦的事情,老哥你就用用变量名吧。

def print_var(x:str)->None:

print(s,"=",eval(s))

粗暴简单的eval,完美解决你的困难。

内心小剧场:安全不安全管我何事

使用locals

毫无疑问,这样的方法遭受到群里老哥的拒绝,要多打两个引号,老哥,你也太懒了吧。

虽然python作为一门动态语言,是肯定有反射这个功能的,但是想从变量获取变量名还是很麻烦的。

def get_variable_name(x)->str:

for k,v in locals().items():

if v is x:

return k

def print_var(x)->None:

print(get_variable_name(x),'=',x)

当然上述代码还是有一些小bug的,比如下面的代码,但是无伤大雅,

a = 1

b = 1

print_var(a)

print_var(b)

带着一些小小的得意,另一个群友发来了这样一张回答

0069Secoly1fmmkwm0xruj30qs0ef0sr.jpg

气氛瞬间凝固了

另一种通过变量名获取变量值的方法

来源于别人提供的知乎回答

import sys

def append(list_, name):

list_.append((name, sys._getframe().f_back.f_locals[name]))

>>> mylist = []

>>> myvar = 12

>>> append(mylist, 'myvar')

>>> mylist

[('myvar', 12)]

原回答可以作为参考,其中还提供了inspect+re来获取的方法,在这就不赘述了,以免教坏别人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值