簡體   English   中英

你能調用/使用從 Python 列表返回的函數嗎?

[英]Can you call/use a function returned from a list in Python?

我試圖將一個函數存儲在一個列表中,稍后從列表中檢索該函數,然后調用該函數。 這基本上就是我想要做的,沒有任何細節。 它沒有顯示我的目的,但這是同一個問題。

elements: list = [] # List meant to contain a tuple with the name of the item and the function of the item.
def quit_code():
    exit()
element.append(("quit", quit_code))

現在,在代碼的其他地方,我希望能夠使用 if 語句來檢查項目的名稱,如果當時是正確的名稱,則運行該函數。

user_input = "quit" # For brevity, I'm just writing this. Let's just imagine the user actually typed this.
if elements[0][0] == user_input:
    #This is the part I don't understand so I'm just going to make up some syntax.
    run_method(elements[0][1])

我隨意制作的方法run_method是問題所在。 我需要一種方法來運行由elements[0][1] 返回的方法,即quit_code 方法。 我不需要這個例子的替代解決方案,因為我只是為了顯示我想要做的事情而編造的。 如果我有一個包含函數的函數或對象,我該如何運行該函數。

(以我能說的最簡單的方式)如果我有包含 str_1 和 fun_b 的 object_a(對我來說它是一個元組),我如何從對象運行 fun_b

為了進一步擴展,我不能直接調用該函數的原因是因為在我的程序中,該函數通過用戶輸入放入元組中,並在本地創建,然后存儲在元組中。

__list_of_stuff: list = []    
def add_to_list(name, function):
    __list_of_stuff.append((name, function))

然后在別的地方

def example_init_method():
    def stop_code():
        exit()

    add_to_list("QUIT", stop_code())

現在請注意,除非我通過__list_of_stuff 對象使用它,否則我無法在代碼中的任何其他地方訪問 stop_code 方法。

最后,不必為輸入創建函數會很好。 在這里,我的意思是直接將代碼插入參數而不創建像 stop_code 這樣的本地函數。 我不知道如何做到這一點。

Python 將函數視為一等公民。 因此,您可以執行以下操作:

def some_function():
    # do something
    pass

x = some_function

x()

由於您正在存儲函數並將每個函數與一個單詞(鍵)綁定,因此最好的方法是字典。 你的例子可能是這樣的:

def quit_code():
    exit()

operations = dict(quit=quit_code)

operations['quit']()

字典將值與鍵相關聯。 唯一的規則是密鑰必須是不可變的。 這意味着數字、字符串、元組和其他不可變對象。

要創建字典,您可以使用 { 和 }。 要通過其鍵獲取值,請使用 [ 和 ]:

 my_dictionary = { 'a' : 1, 'b' : 10 }

 print(my_dictionary['a'])    # It will print 1

您還可以使用dict創建字典,如下所示:

 my_dictionary = dict(a=1, b=10)

然而,這只適用於字符串鍵。

但是考慮到你是用quit_code來封裝exit調用,為什么不直接用exit呢?

 operations = dict(quit=exit)

 operations['quit']()

如果字典不是一個選項,您仍然可以使用列表和元組:

 operations = [('quit',exit)]

 for key, fun in operations:
     if key == 'quit':
         fun()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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