如何创建可变变量?

新手上路,请多包涵

我知道其他一些语言, 比如 PHP ,支持一个“可变变量名”的概念——也就是说,字符串的内容可以作为变量名的一部分。

我听说这通常不是一个好主意,但我认为它可以解决我在 Python 代码中遇到的一些问题。

有可能在 Python 中做这样的事情吗?会出什么问题?


如果您只是想通过名称 查找现有 变量,请参阅 如何通过(字符串)名称选择变量? .但是,首先考虑是否可以按照此问题中的建议重新组织代码以避免这种需要。

原文由 Pyornide 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 297
2 个回答

您可以使用 字典 来完成此操作。字典是键和值的存储。

 >>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'y': 2, 'x': 1, 'z': 3}
>>> dct["y"]
2

您可以使用可变键名来实现可变变量的效果,而没有安全风险。

 >>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'

对于您正在考虑做类似的事情的情况

var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...

列表 可能比字典更合适。列表表示对象的有序序列,具有整数索引:

 lst = ['foo', 'bar', 'baz']
print(lst[1])           # prints bar, because indices start at 0
lst.append('potatoes')  # lst is now ['foo', 'bar', 'baz', 'potatoes']

对于有序序列,列表比带有整数键的字典更方便,因为列表支持按索引顺序迭代、 切片append 以及其他需要使用字典进行笨拙的键管理的操作。

原文由 c_harm 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用内置的 getattr 函数按名称获取对象的属性。根据需要修改名称。

 obj.spam = 'eggs'
name = 'spam'
getattr(obj, name)  # returns 'eggs'

原文由 SilentGhost 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题