簡體   English   中英

函數字典返回每個函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM