我很难从预定义函数的字典中返回特定函数。这是我的代码:
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("")
我已经创建了一个使用算术函数的程序的成功版本。它将返回相对于每次迭代时连接的字符串的相应函数。但是,对于要返回字符串的函数,它会在每次迭代时返回字典中的所有四个函数。为什么会发生这种情况?如何使其与算术字典的行为相同?
答案 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
。