首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中访问给定变量的名称?

如何在python中访问给定变量的名称?
EN

Stack Overflow用户
提问于 2011-10-26 12:50:27
回答 1查看 170关注 0票数 3

我正在用python编程,并且需要访问我为对象指定的名称,以便能够将其作为字符串(与另一个字符串连接)进行传递。

我需要这样做的原因是,我使用的程序迫使我创建一个全局对象(在我的例子中是一个字典),并且我正在编写一个函数来处理几个不同的对象(每个对象都有相似的属性集,例如。对象1的长度为2(在我的例子中表示2个神经元),标记为0和1,每个对象都有4个属性a,b,c,d。我想创建这些属性的“字典文件树”,但object1和对象2都是同一类的2个实例,因此我需要将第一级键更改为'NAME1_0,'NAME1_1','NAME2_0','NAME2_1')。

代码语言:javascript
复制
def Init(neuron,input):
#Initialises the neuron group, arguements are neuron (neurongroup) and input (neurongroup)
global dict
dict={}
for x in range(0,len(neuron)):
    neuron[x].L=0
    neuron[x].G=0
    neuron[x].ron=1/period
    neuron[x].roff=1/period
    dict[x]={'tau_on':0.5,
             'Non_off':neuron[x].roff*0.5,
             'Non_off':neuron[x].ron*0.5,
             'Ni_on':ones(len(input))*qon*0.5,
             'Ni':ones(len(input))*qoff*0.5+ones(len(input))*qon*0.5,
             'p_current':0,
             'p_previous':0,
             'my_tau_on':[],
             'my_Non_off':[],
             'my_Noff_on':[],
             'my_Ni_on':[],
             'my_Ni':[],
             'my_p_on':[],
             'my_ron':[],
             'my_roff':[],
             'my_theta':[],
             'my_weights':[],
             'my_record_times':[]}
     dict['%s' % x, neuron]=dict.pop(x)

不起作用,因为它没有给出分配给对象的名称,而只是给出了对象本身的名称。对于我的问题的一个更小的例子

代码语言:javascript
复制
NAME1=4
def func(x):    #creates string of 'NAME1'
    print 'x'

func(NAME1)
#output='NAME1'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-26 13:06:58

您可以反向查找globals()中的名称:

代码语言:javascript
复制
>>> NAME1 = 4
>>> def name_of(value):
        for k, v in globals().items():
            if v is value:
                return k
        raise KeyError('did not find a name for %s' % value)

>>> name_of(NAME1)
'NAME1'

如果将同一对象分配给多个名称,则只返回一个名称。

如果您希望搜索范围更广,而不仅仅是全局搜索,请在gc.get_referrers(value)中查找词典并捕获所有匹配项:

代码语言:javascript
复制
>>> def names_of(value):
        'Find all names for the value'
        result = []
        for d in gc.get_referrers(value):
            if isinstance(d, dict):
                for k, v in d.items():
                    if v is value:
                        result.append(k)
        return result

>>> import math
>>> pie = math.pi
>>> names_of(pie)
['pie', '_pi', 'pi', 'pi']
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7898831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档