在函数定义之前声明的函数字典



我有以下代码:

my_dict = {"function1" : function1, "function2" : function2}
def call_functions():
for key in my_dict.keys():
mydict[key]()
def function1():
print "hello 1"
def function2():
print "hello 2"
if __name__ == '__main__':
call_functions()

我的理解是这应该工作-当mydict在函数定义之前被声明时,python基于名称调用它们,而不是基于指向函数的实际指针。因为当代码运行时,它们确实存在(因为这是通过main发生的),所以应该没有问题。然而,我得到了可怕的NameError——告诉我function1不存在。

没有在文件的结尾声明my_dict(我想把全局变量放在用户可以访问的顶部),有没有办法解决这个问题?我不明白,当我调用函数时,已经被声明为

在解释第一行时,引用了'function1'和'function2'变量,但尚未声明,因此程序崩溃,如您所见。

将函数声明移到my_dict行之前,它将工作。你还有一个错别字,我在这里改正了。(mydict vs my_dict)

def function1():
print("hello 1")
def function2():
print("hello 2")

my_dict = {"function1" : function1, "function2" : function2}
def call_functions():
for key in my_dict.keys():
my_dict[key]()
if __name__ == '__main__':
call_functions()

编辑:正如@chepner建议的那样,除非在这个上下文中有什么可以提供一个很好的理由,否则将函数保存在字典中是不必要的,列表就足够了。

def function1():
print("hello 1")
def function2():
print("hello 2")
my_list = {function1, function2}
def call_functions():
for func in my_list:
func()
if __name__ == '__main__':
call_functions()

最新更新