0

所以我有一本字典,里面有一堆我用来调用函数的名字。它工作正常,但我更喜欢将它放在我的设置文件中。但是,如果我这样做,我会从设置文件中得到错误,指出没有该名称的函数(即使我当时没有调用它们)。任何解决方法?

def callfunct(id, time):
    #stuff here
def callotherfunct(id, time):
    #stuff here
dict = {"blah blah": callfunct, "blah blah blah": callfunct, "otherblah": callotherfunct}
dict[str(nameid)](id, time)

希望这是有道理的。也对其他想法持开放态度,但基本上我有大约 50 次这些定义的迭代以及由 nameid 传递的需要调用特定函数的唯一名称,所以这就是我这样做的原因,以便我可以快速添加新名称. 如果我也可以将字典无缝地放入设置文件中,那显然会更快。

4

2 回答 2

1

如果你试试

def f_one(id, time):
    pass

def f_two(id, time):
    pass

d = {"blah blah":"f_one", "blah blah blah":"f_one", "otherblah","f_two"
locals()[d[str(nameid)]](id, time)

(用您要调用的函数的字符串名称加载配置文件来替换字典初始化),这行得通吗?

如果不是,则需要更多信息:配置文件是什么样的,您是如何加载它的?

我猜配置文件部分不工作的原因是你试图直接从配置文件中引用函数,这不应该工作。这是使用存储在配置文件中的任何内容并在字典中查找它locals()(如果你在一个函数中,你将不得不使用它globals()

于 2012-11-02T00:32:18.467 回答
0

只有当您尝试访问它时,您才能使用查找功能初始化字典:

d = {}
d.setdefault('func1', globals()['func1'])()
于 2012-11-02T00:33:46.293 回答