我想你想要类似的东西
lookup = {"A": A1, "B": B1, "C": C1}
obj = lookup.get(blurb,None)
if obj:
obj.foo()
当有人想要使用 switch 语句(来自 c/java/etc.)执行某些操作时,通常会建议这样做。请注意,lookup.get(而不仅仅是 Lookup[blurb] 处理 blurb 不是某个值之一的情况)您定义它是为了...您也可以将其包装在 try/ except 块中。
根据您修改后的问题更新了答案,该问题基于 Joachim Pileborg 在另一个答案中所说的内容。
可能有更好/更干净的方法来做到这一点,但如果你真的想通过字符串设置/获取来操作全局对象,你可以这样做。一种方法是:
创建名为“myvariable”的新对象(或将“myvariable”设置为新值)
joe = "myvariable"
globals().update([[joe,"myvalue"]])
要将对象“myvariable”分配给:
globals().get(joe,None)
(或者正如另一个答案中提到的,您可以将 try/ except 与直接哈希一起使用,而不是使用 get)
因此,对于后面的示例,您可以执行以下操作:
for myobject in mylist:
# add myobject to list called locus
# e.g. if locus == "A", add to list "A", if locus == "B" add to list B etc.
obj = globals().get(myobject.locus,None) # get this list object
if not obj: # if it doesn't exist, create an empty list named myobject.locus
obj = []
globals().update([[myobject.locus,obj]]
obj.append(myobject) #append my object to list called locus