在Python中如何将字符串转换为变量?

5

我对Python和编程一窍不通,想一直学习如何实现这个功能。

以下是需要帮助的方面:

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

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

当然,输出结果是'p02',但我怎么才能让输出结果变成p02的值('bye')呢?
希望这样说得清楚,期待您的回答。

3
有几种方法可以实现这个,但正确的方法是使用一个“字典”。你没有使用“字典”,有什么原因吗?例如,d = {'p01': 'hello','p02': 'bye'}; print(d['p'+(str(y)+str(x))]) - SethMMorton
听起来像是一个 XY 问题。你到底为什么需要这个?重新思考和重构。 - Andrew Li
1个回答

6

您可以使用 eval()...

它会像执行Python代码一样,对存储在字符串中的表达式进行求值。

在您的情况下,'p'+(str(y)+str(x)) 变成了 'p01',然后得到表达式 p01 的结果,当然是 'bye'

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

请注意,您永远不应该这样做 - 几乎总有更好的方法。请阅读 为什么使用“eval”是一种不好的做法? 那么,我们该怎么办呢? globals() 给出了一个字典,其中包含 Python 程序中所有全局变量的名称及其相应的值。因此,我们可以简单地执行以下操作:
globals()['p'+(str(y)+str(x))]

这将评估为globals()['p01'],获取全局p01的值 - 这是bye

再次强调,这只是一个解决更大问题的变通方法

重新构建您的代码。 将它们制成数组或字典并获取其索引。 仔细考虑为什么要这样做,并更改代码以避免此类情况。 eval看起来是最佳选择是不好的


1
给那位点了踩的人...请解释一下,这样答案才能得到改进。是的,“eval是邪恶的”,如果这就是你点踩的原因,你应该解释一下为什么。 - SethMMorton
1
如果 OP 拒绝使用自己的字典,更好的方法是执行 globals()['p'+(str(y)+str(x))](或者在函数内部执行 locals()['p'+(str(y)+str(x))])。这将消除对 eval 的使用。 - SethMMorton
1
顺便说一下,这个更清晰... 'p{}{}'.format(y, x) - SethMMorton
@SethMMorton 谢谢你!我一直在尝试想出一种方法来做到这一点,这样我就可以说“你可以使用eval,但这更好”,但现在我可以使用你的方法:D 我不知道globals() - Toastrackenigma
1
如果你想提出更好的建议,建议首先使用dict - SethMMorton
@JakeySnakey 太棒了,很高兴我们能帮到你!如果问题已解决,请接受它(通过点击旁边的复选标记),以便帮助未来寻找解决方案的人们。 - Toastrackenigma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接