擅长:python、mysql、java
<p>我想你想要像</p>
<pre><code>lookup = {"A": A1, "B": B1, "C": C1}
obj = lookup.get(blurb,None)
if obj:
obj.foo()
</code></pre>
<p>当有人想使用switch语句(来自c/java/etc)时,通常会建议这样做。注意lookup.get(而不仅仅是lookup[blurb]处理blurb不是您为其定义的值之一的情况。。。你也可以把它包装在try/except块中。</p>
<hr/>
<p>根据你修改后的问题更新了答案,这是建立在约阿希姆·皮勒堡在另一个答案中所说的基础上的。</p>
<p>可能有更好/更干净的方法来实现这一点,但是如果您真的想通过字符串设置/获取来操作全局对象,那么您可以这样做。一种方法是:
创建名为“myvariable”的新对象(或将“myvariable”设置为新值)</p>
<pre><code>joe = "myvariable"
globals().update([[joe,"myvalue"]])
</code></pre>
<p>要获取对象“myvariable”被分配给:</p>
<pre><code>globals().get(joe,None)
</code></pre>
<p>(或者如另一个答案中所述,可以将try/except与直接哈希一起使用,而不是使用get)</p>
<p>所以在后面的例子中,你可以这样做:</p>
<pre><code>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
</code></pre>