函数字典返回每个函数

时间:2017-05-16 14:31:53

标签: python function dictionary

我很难从预定义函数的字典中返回特定函数。这是我的代码:

import random

def bos1():
    print ("function 1")

def bos2():
    print ("function 2")

def bos3():
    print("function 3")

def bos4():
    print("function 4")
count = 0

while True :
    if count <4:

        bos = "bos"
        poz = random.randint(3, 4)
        bos = bos+str(poz)


        bosdict = {'bos1': bos1(),'bos2':bos2(),'bos3':bos3(),'bos4':bos4()}
        count += 1
        print("please only printe one",bosdict[bos])
        print("count:\n", count)

        input("")

    else:

        bos = "bos"
        poz = random.randint(1, 2)
        bos = bos+str(poz)


        bosdict = {'bos1': bos1(),'bos2':bos2(),'bos3':bos3(),'bos4':bos4()}
        count += 1
        print("please only printe one",bosdict['bos'])
        print("count:\n", count)

        input("")

我已经创建了一个使用算术函数的程序的成功版本。它将返回相对于每次迭代时连接的字符串的相应函数。但是,对于要返回字符串的函数,它会在每次迭代时返回字典中的所有四个函数。为什么会发生这种情况?如何使其与算术字典的行为相同?

1 个答案:

答案 0 :(得分:2)

你没有创建一个函数字典,而是一个函数调用的字典(由于你的函数没有返回任何内容而None):创建字典时执行所有函数

删除dict中的(),在检索dict中的值以调用函数后,您将使用它:

bosdict = {'bos1': bos1,'bos2':bos2,'bos3':bos3,'bos4':bos4}

调用这样的随机函数:

bosdict[random.choice(list(bosdict.keys()))]()

或者更简单一点,在这种情况下你不需要键,只需要值:

random.choice(list(bosdict.values()))()

或使用随机索引生成的名称:

bosdict["bos{}".format(count)]()

请注意,如果函数计算速度慢或有副作用或参数,动态调用函数只会有一些兴趣,否则创建静态字典会更好(使用return代替正如克里斯所说,print