所以我有一个字典,里面有一堆用来调用函数的名字。它工作正常,但我更喜欢把它放在我的设置文件中。但是,如果我这样做,我将从设置文件中得到错误,说明该名称没有任何功能(即使我当时没有调用它们)。任何解决方法?
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传递的需要调用特定函数的唯一名称,所以这就是为什么我这样做,所以我可以快速添加新名称。如果我能将字典无缝地插入到设置文件中,显然会更快。
答案 0 :(得分: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()
)
答案 1 :(得分:0)
只有在您尝试访问该字典时,才可以使用查找功能初始化字典:
d = {}
d.setdefault('func1', globals()['func1'])()