【问题标题】:Convert string to variable in python? [duplicate]在python中将字符串转换为变量? [复制]
【发布时间】:2017-07-30 05:52:15
【问题描述】:

我对 python 和编程完全陌生,并且一直在尝试弄清楚如何做到这一点。

以下是我需要帮助的地方:

y=0
x=2
p01='hello'
p02='bye'

print('p'+(str(y)+str(x)))

输出当然是'p02',但是我怎样才能使输出而不是p02的值('bye')

希望这是有道理的,我期待任何答案。

【问题讨论】:

  • 有很多方法可以做到这一点,但正确的方法是使用dict。您没有使用dict 有什么原因吗?例如,d = {'p01': 'hello', 'p02': 'bye'}; print(d['p'+(str(y)+str(x))])
  • 听起来像是 XY 问题。为什么你还需要这个?重新思考和重组。

标签: python


【解决方案1】:

你可以使用eval()...

它评估存储在字符串中的表达式,就像它是 Python 代码一样。

在你的例子中,'p'+(str(y)+str(x)) 变成了'p01',所以它得到表达式p01 的结果,当然是'bye'

print(eval('p'+(str(y)+str(x))))

但是请注意,您永远不应该这样做 - 几乎总是有更好的方法。请阅读Why is using 'eval' a bad practice?

那么,我们能做些什么呢?

globals() 为我们提供了 Python 程序中所有全局变量的字典,它们的名称为 字符串索引,它们的值作为字典值。因此,我们可以简单地这样做:

globals()['p'+(str(y)+str(x))]

计算结果为globals()['p01'],得到全局p01 的值——即bye

同样,这是一个更大问题的解决方法

重构您的代码。将它们制成数组或字典并获取它的索引。想想你为什么要这样做,并改变你的代码,这样你就不必这样做了。 不好处于 eval 看起来是最佳选择的情况。

【讨论】:

  • 对投票失败的人...请解释一下,以便改进答案。是的,“eval 是邪恶的”,如果这就是你投反对票的原因,你应该解释原因..
  • 如果 OP 拒绝使用他们自己的 dict,更好的方法是使用 globals()['p'+(str(y)+str(x))](或 locals()['p'+(str(y)+str(x))],如果在函数内部)。这将消除eval 的使用。
  • 当我们这样做的时候,这更清楚了...'p{}{}'.format(y, x).
  • @SethMMorton 谢谢你!我试图想出一种方法来做到这一点,所以我可以说你可以使用 eval,但这更好,但现在我可以使用你的:D 我不知道 globals()。跨度>
  • 如果您想提出更好的建议,建议首先使用dict
猜你喜欢
  • 2013-04-20
  • 2019-01-20
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2015-09-12
相关资源
最近更新 更多