Discuss / Python / 有没有办法,获取到变量名,而不是值?

有没有办法,获取到变量名,而不是值?

Topic source

开心Ikos

#1 Created at ... [Delete] [Delete and Lock User]

如: a=[1,2,b,5] b=[3,4] for i in a: print(i) 我想要打印的是'b',但实际打印的是[3,4],这个怎么办?

Bruce不傻

#2 Created at ... [Delete] [Delete and Lock User]

不知道对不对,我也是小白。

在此插入代码

b=[3,4] a=[1,2,b,5] for i in a: print(i)

1 2 [3, 4] 5

a=[1,2,'b',5] for i in a: print(i)

1 2 b 5

b [3, 4]

因垂丝汀

如: a=[1,2,b,5] b=[3,4] for i in a: print(i) 我想要打印的是'b',但实际打印的是[3,4],这个怎么办?

题主的这个需求有点出圈了。 人类肉眼一看就知道源码里有个b=[3,4]是个列表,人类写好的代码保存在磁盘上,使用解释器来执行。 对解释器来讲它看见的是一个字节流,它没有那么机智可以一眼看穿人类的意图。 解释器得把语法树,符号表建起来它才知道人类想弄啥。

你的需求打印'b'而不是打印[3,4],这是要查符号表的节奏。

然而机智的python早已经看穿了一切 -> Python Language Services

import symtable

st=symtable.symtable('b=[3,4]\na=[1,2,b,5]','/tmp/st.py','exec')
symbol_b=st.get_symbols()[0] #找到需要的符号
print(symbol_b.get_name()) #打印它的名字
"ipython_edit_8ns68xvz.py" 5L, 154C written
done. Executing edited code...
b #<----- 喏,先生。这是您要的b

zzh_跑跑

#4 Created at ... [Delete] [Delete and Lock User]

b=[3,4] print(b) [3, 4] print('b') b print("\'b\'") 'b' 结合前几课 想复杂了而已

清风54083

#5 Created at ... [Delete] [Delete and Lock User]

也就今天的一次解决,没有大费周章,每次看到后面,就害怕自己前面的忘了,答题也不利索,脑子很乱


  • 1

Reply