【问题标题】:Pythonic way to set variable name as string将变量名设置为字符串的 Pythonic 方法
【发布时间】:2014-08-21 16:30:09
【问题描述】:
data1 = [1,2,3,4,5]
data2 = [7,8,9,10,11]  


x = data1
y = data2

我需要的是上述变量的字符串如下:

xlabel = 'data1'
ylabel = 'data2'

我如何使用 x 调用而不是手动编写,如下所示:

xlabel = str(x) 

但上面是错误的。 那么,该怎么做呢?

xlabel =???

有没有pythonic的方法?

【问题讨论】:

  • 为什么要这样做?这可能是可能的,但我怀疑这是个好主意。
  • 在全球范围内几乎没有理由这样做。如果您想要这种功能,请使用字典来存储您的值。
  • 我建议你阅读this。名称不是对象的属性,它们只是用来引用它们的“标签”。
  • 如果你有变量data1 来写str(data1),那么你可以改写'data1' .. :)
  • 那么,如果你想用字符串索引,你应该使用字典;如果你只想按顺序存储它们,则应该使用列表。

标签: python


【解决方案1】:

要了解为什么这没有意义,请考虑以下 sn-p

def magic_name_getter(object):
    # here be dragons
    return the_name

data1 = [1,2,3,4]
magic_name_getter(data1)  # returns 'data1'

data1 = [1,2,3,4,5]
data2 = [1,2,3,4,5]
magic_name_getter(data2)  # returns 'data2' (..or 'data1'?)

magic_name_getter([7,8,9,10,11])  # returns ... ummm ... ???

python中的对象可以有很多名字,也可以没有名字。

所以你想要的,虽然not impossible,是非常困难的。由于变量名称是您的用例的重要数据,因此您应该使用 keysvalues 的字典将名称映射到列表,以便轻松访问名称(键)以及数据(值)。

【讨论】:

  • NameError: 未定义全局名称“the_name”
  • 哈哈。确切地!很高兴你终于明白了!
  • ROFL。我认为OP试图运行它。原始海报,我认为“magic_name_getter”和“the_name”实际上不会起作用。这是一个思想实验,而不是经验实验。假装它是“魔法”,如果魔法可能,它就会起作用。
  • @wim 请查看我编辑的问题。我无法得到我所期望的。
【解决方案2】:

你真的应该考虑组织你的数据,例如,在字典中:

a = dict(
    data1 = [1,2,3,4,5],
    data2 = [6,7,8,9,10],
    )

x = a.keys()[0]
y = a.keys()[1]

print x, y

输出:

data1 data2

通常您不需要将密钥存储在单独的变量中,例如 xy,而是直接在 a.keys()a.items() 上工作。

【讨论】:

    【解决方案3】:

    collections.namedtuple 可能会帮助你:

    import collections
    Parameters = collections.namedtuple('Parameters', 'dataname, data', verbose = False)
    x = Parameters('data1', [1,2,3,4,5])
    y = Parameters('data2', [7,8,9,10,11])
    
    >>> x.dataname
    'data1'
    >>> x.data
    [1, 2, 3, 4, 5]
    >>> y.dataname
    'data2'
    >>> y.data
    [7, 8, 9, 10, 11]
    

    您可以像这样将它用于您的情节:

    plt.scatter(x.data, y.data)
    plt.xlabel(x.dataname)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-24
      • 2016-04-21
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多