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