试图根据列表从字典中调用函数

时间:2016-01-10 14:01:07

标签: python list function dictionary iterable

我正在尝试编写一些检查两个列表(ownedchoose)的代码,然后它会检查choose中的项目是否在owned中根据两个列表中的内容运行正确的函数。

def func1():
    print("hello")

def func2():
    print("hello2")

def func3():
    print("hello3")

def func4():
    print("hello4")

owned = ['a', 'b', 'c', 'd']
choose = ['a', 'c', 'f' ,'g']

funcs = {'a' : func1(), 'b' : func2(), 'c' : func3(), 'd' : func4}
for i in choose:
    if i in owned:
        funcs[i]()

我的问题是我无法使用funcs[i](),但我收到此错误:

    funcs[i]()
TypeError: 'NoneType' object is not callable

这意味着我无法使用i来调用这些函数。无论如何我能达到同样的目标吗?

1 个答案:

答案 0 :(得分:0)

在dict funcs中为每个键,方法名称(func1func2,...)分配而不是函数调用,以便在字典中保留引用调用每个函数的结果。

funcs = {'a' : func1, 'b' : func2, 'c' : func3, 'd' : func4}

然后,只要满足if条件,就调用它们:

for i in choose:
    if i in owned:
        funcs[i]()