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