如何从字符串(例如字母和数字的串联)生成变量名?
在 Matlab 中,可以使用 genvarname 轻松完成此任务。
这是一个非常的糟糕方法(未定义的行为),但我认为它展示了通向更合理技术的道路。
您当前的命名空间实际上是一本字典:
>>> local_namespace = locals()
>>> name = "myVarName"
>>> local_namespace[name] = 'VarData'
>>> myVarName
'VarData'
但这不是很 DRY - 你必须将变量的名称写两次!最好使用一个变量来存储动态创建的变量的名称,这样我们就不必输入两次:
>>> name
'myVarName'
显然不适用于此。但我们可以再次使用我们的字典:
>>> local_namespace[name]
'VarData'
现在我们可以存储和调用与变量关联的值。但是等等 - 不需要为此使用特殊的 locals()
字典 - 普通的字典就可以!
>>> d = {}
>>> d[name] = 'VarData'
>>> d[name]
'VarData'
现在我们有了所有这些额外的好处,比如能够在列表中跟踪其中几个变量的名称:
>>> l = []
>>> l.append('myVarName')
>>> l.append('anotherVarName')
字典甚至为我们做到了这一点:
>>> d['anotherVarName'] = 123
>>> d.keys()
['myVarName', 'anotherVarName']
除非您正在做非常古怪的事情,否则很难想象构造变量名称会比使用字典更有用。
我是一名优秀的程序员,十分优秀!