当前位置:  开发笔记 > 编程语言 > 正文

如何在python中打印变量名?

如何解决《如何在python中打印变量名?》经验,为你挑选了5个好方法。

假设我有一个名为choice它的变量等于2.我如何访问变量的名称?相当于的东西

In [53]: namestr(choice)
Out[53]: 'choice'

用于制作字典.有一个很好的方法来做到这一点,我只是错过了它.

编辑:

因此,这样做的原因.我正在运行一些数据分析的东西,我在程序中调用了多个参数,我想在运行时调整或不调整.我读了我在上一次运行中使用的参数,从.config文件格式化为

filename
no_sig_resonance.dat

mass_peak
700

choice
1,2,3

当提示输入值时,将显示先前使用的值,空字符串输入将使用先前使用的值.

我的问题是因为在写字典时已经扫描了这些值.如果需要一个参数,我运行get_param访问文件并找到参数.

我想我会通过阅读来避免这个问题.config提交一次并从中生成字典.我原本避免了这个......我不再记得的原因.更新我的代码的完美情况!



1> Constantin..:

如果你坚持,这里有一些可怕的基于检查的解决方案.

import inspect, re

def varname(p):
  for line in inspect.getframeinfo(inspect.currentframe().f_back)[3]:
    m = re.search(r'\bvarname\s*\(\s*([A-Za-z_][A-Za-z0-9_]*)\s*\)', line)
    if m:
      return m.group(1)

if __name__ == '__main__':
  spam = 42
  print varname(spam)

我希望它会激励你重新评估你的问题并寻找另一种方法.


有时候,一夜的调试会让我们做一些我们并不自豪的事情.

2> jfs..:

回答你原来的问题:

def namestr(obj, namespace):
    return [name for name in namespace if namespace[name] is obj]

例:

>>> a = 'some var'
>>> namestr(a, globals())
['a']

正如@rbright已经指出你所做的一切,可能有更好的方法.


我喜欢你的答案代码的流程,但我可能正在使用可能在代码中重复多次的整数...*叹气*
如果存在多个引用相同值的变量名,则此操作将失败。
@Piotr Dobrogost:*"分享他们的代表"*指的是缓存小整数的CPython优化,因此其中一个集合是不可数的,它是有限的.

3> Georg Schöll..:

你不能,因为Python中没有变量而只有名称.

例如:

> a = [1,2,3]
> b = a
> a is b
True

这两个中的哪一个现在是正确的变量?a和之间没有区别b.

之前有一个类似的问题.


a和b之间的区别在于名称.
"Python中没有变量"愚蠢的错误信息.你的意思是,"Python中的变量与C中的变量不同."
他是对的,因为你没有办法在Python中编写一个函数来区分.尽管如此,没有理由没有内置功能来实现这一目标.

4> recursive..:

如果你想这样做,那就意味着你做错了什么.考虑使用dict替代.

def show_val(vals, name):
    print "Name:", name, "val:", vals[name]

vals = {'a': 1, 'b': 2}
show_val(vals, 'b')

输出:

Name: b val: 2



5> Ryan Bright..:

我建议您描述您遇到的问题,而不是向特定解决方案询问详细信息; 我想你会得到更好的答案.我这样说是因为几乎可以肯定有更好的方法去做你想做的事情.通常不需要以这种方式访问​​变量名来解决任何语言的问题.

也就是说,所有变量名都已经在字典中,可以通过内置函数locals和globals访问.使用正确的一个作为您正在检查的范围.

检查这些词典的少数常用习惯之一是简单的字符串插值:

>>> first = 'John'
>>> last = 'Doe'
>>> print '%(first)s %(last)s' % globals()
John Doe

即使需要按名称检查变量,这种事情往往比替代品更具可读性.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有