[英]dictionary of functions returns every function
我很難從預定義函數的字典中返回特定函數。 這是我的代碼:
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("")
我已經創建了使用算術函數的該程序的成功版本。 它將返回相對於每次迭代已連接的字符串的適當函數。 但是,對於要返回字符串的函數,每次迭代都會返回字典中的所有四個函數。 為什么會發生這種情況,如何使它的行為與算術字典相同?
您不是在創建函數字典,而是在創建函數調用字典(由於您的函數未返回任何內容,因此它們為None
):創建字典時將執行所有函數。
刪除字典中的()
,在檢索字典中的值以調用函數后將使用它:
bosdict = {'bos1': bos1,'bos2':bos2,'bos3':bos3,'bos4':bos4}
像這樣調用一個隨機函數:
bosdict[random.choice(list(bosdict.keys()))]()
或者更簡單,在這種情況下,您不需要鍵,只需要值即可:
random.choice(list(bosdict.values()))()
或使用隨機索引生成的名稱:
bosdict["bos{}".format(count)]()
請注意,只有在函數計算速度慢或具有副作用或參數的情況下,動態調用函數才有一定意義,否則,最好創建一個靜態字典(使用Chris所說的return
而不是print
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.