簡體   English   中英

在 Python 中,如何使用列表中的字符串調用同名函數?

[英]How do you use a string from a list to call a function with the same name, in Python?

我在任何地方都找不到令人滿意的答案,所以我決定問一下。

假設我們有一個全局計數器和一個全局列表

counter=0
list=["function1","function2",..."functionN"]

我們還定義了這些函數:

def function1():
  pass
def function2():
  pass
.
.
.
def functionN():
  pass


我有一個帶按鈕的界面,每次按下它,全局計數器都會增加。 根據數量,我需要調用不同的函數。 我可以用 if 和 elif 來實現這個,但我認為它不是那么聰明。 有沒有辦法可以使用列表調用這些函數?

例子

當 counter=0=>list[0]=> 字符串是 'function1'=> 調用 function1()

再次按下按鈕

counter=1=>list[1]=>字符串是'function2'=>調用function2()

您可以按名稱調用函數,如下所示:

locals()["myfunction"]()

或者:

globals()["myfunction"]()

或者如果它來自像這樣的另一個模塊:

import foo
getattr(foo, 'myfunction')()

或者,如果它適合您的用例,只需使用函數列表而不是字符串列表:

def func1():
    print("1")

def func2():
    print("2")

def func3():
    print("3")

def func4():
    print("4")

some_list=[func1, func2, func3, func4]

# call like this
for f in some_list:
    f()

# or like this
some_list[0]()

與@chepner 所說的類似,我會以這種方式解決問題。

可能將函數存儲在字典中並根據計數器查找函數:

def function():
    print('function 1 called')

def function2():
    print('function 2 called')

counter = 0

functions = {
    1: function,
    2: function2
}

然后:

function_to_call = functions[counter + 1]

現在,當function_to_call()被調用時,它會打印function 1 called

這就是我如何看待解決問題的方式。

暫無
暫無

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

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