【问题标题】:Use variable name, not its value [duplicate]使用变量名,而不是它的值[重复]
【发布时间】:2020-12-17 04:32:03
【问题描述】:

什么?

我想使用变量的名称,而不是它的值。例如,在下面的示例中,我希望函数返回 my_list[1],而不是 B..

my_list = ['A', 'B']
def example(list_element):
   print(repr(eval(list_element)))

example(my_list[1]) # I would like this to print `my_list[1]`

但是为什么呢?

我正在尝试创建一个函数,该函数从列表中获取给定元素,并且还使用前一个列表元素。通过获得名称my_list[1],我可以减去一个并获得my_list[0]。一旦我有了这两个名称,我就可以利用存储在这些名称下的值。

是的,我可以简单地在函数中添加两个字段,然后每次都将它们放入,但我希望让我的代码主体更易于阅读。

【问题讨论】:

  • 你的意思是print(f"{list_element=}")
  • 对象不知道它们在任何给定时间碰巧绑定到哪些变量。你打算硬编码这个只使用一个特定的变量“my_list”还是应该是通用的?
  • @grismar 你有什么建议?留下同样的问题?我在评论中加入了“不要这样做”和“从列表中返回一个切片或者可能是 prev/act 值的元组”的建议。如果我们让它打开,同样糟糕的糟糕答案会出现 - 使用 eval、使用检查、搜索 global() 等
  • @PatrickArtner - 不,提供一个简单的答案,说明数据和代码之间的差异。我下面的答案与 OP 需要的一样简单。您可以编写一个更好的答案,简明扼要地解释差异并产生类似的解决方案。引用的答案的作用是“当然,如果你想成为一个白痴:这就是方法” - 它们没有错,但它们对刚开始的编码人员没有好处,他们只是不知道更好,答案只会把他们送进死胡同。
  • @SolebaySharp - 很高兴听到这句话,这意味着您正在朝着更好的方向前进。我的评论更笼统,像这样的问题比每天都出现。但感谢您的反馈。我认为我们可以保持原样:)

标签: python function variables


【解决方案1】:

不要使用数据来操作代码,这不是 Python(或大多数语言)的工作方式。

做你想做的事:

my_list = ['A', 'B']


def example(a_list, index):
    print('The element passed: ', a_list[index])
    print('The element before it: ', a_list[index-1])


example(my_list, 1)

当然,这并不能检查您是否不小心通过了0 等 - 但它表明您不需要弄乱evalexec 等。

【讨论】:

  • 谢谢,这是一个明智的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 2020-10-16
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
相关资源
最近更新 更多