这可能是非常基本和简单的事情,我可能只是谷歌搜索错误的条款,但希望这里有人能帮助我。(我还是一个编程新手,这一点从这个问题上很明显。)
我正在寻找从字符串访问变量的方法。
像这样:
A1 = {}
B1 = {}
C1 = {}
mylist = ["A","B","C"]
for blurb in mylist:
blurb1.foo()
现在我在这种情况下使用if/elif结构:
if blurb == "A":
A1.foo()
elif blurb == "B":
B1.foo()
elif blurb == "C":
C1.foo()
这很有效,但肯定有更优雅的方式来做?
谢谢你的帮助! 拉斯塔达
编辑2:再次试图澄清(很抱歉之前不太连贯,我很难理解):
我想从字符串创建和访问对象。
所以如果我有一个返回字符串的函数,我想创建一个使用这个字符串作为列表名的列表,然后用这个列表做一些事情。
x = foo() # foo returns a string, e.g. "A"
# create list named whatever the value of x is
# in this case:
A = []
难道没有什么比为x的所有可能结果准备列表和使用长elif结构或字典更优雅的了吗?在这种情况下,我必须使用eval()吗?(我不太愿意使用eval(),因为它被认为是危险的。)
我希望现在终于清楚了。 感谢您的帮助!
使用
eval()
。示例:
对于您的代码,可以是:
我想你想要像
当有人想使用switch语句(来自c/java/etc)时,通常会建议这样做。注意lookup.get(而不仅仅是lookup[blurb]处理blurb不是您为其定义的值之一的情况。。。你也可以把它包装在try/except块中。
根据你修改后的问题更新了答案,这是建立在约阿希姆·皮勒堡在另一个答案中所说的基础上的。
可能有更好/更干净的方法来实现这一点,但是如果您真的想通过字符串设置/获取来操作全局对象,那么您可以这样做。一种方法是: 创建名为“myvariable”的新对象(或将“myvariable”设置为新值)
要获取对象“myvariable”被分配给:
(或者如另一个答案中所述,可以将try/except与直接哈希一起使用,而不是使用get)
所以在后面的例子中,你可以这样做:
您可以获取module对象,并使用
getattr
从字符串中获取变量/函数:上述程序将打印:
但是,它与您在问题中引用的“通配符”无关,但您没有显示任何搜索“通配符”的结果。
相关问题 更多 >
编程相关推荐