亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Python中使用列表中的字符串來調用具有相同名稱的函數?

如何在Python中使用列表中的字符串來調用具有相同名稱的函數?

繁星點點滴滴 2022-08-16 09:42:13
我無法在任何地方找到令人滿意的答案,所以我決定問。假設我們有一個全局計數器和一個全局列表counter=0list=["function1","function2",..."functionN"]我們還定義了這些函數:def function1():  passdef function2():  pass...def functionN():  pass我有一個帶有按鈕的界面,每次我按下它時,全局計數器都會遞增。根據號碼,我需要調用其他函數。我可以使用if和elif來實現這一點,但我認為它不是那么聰明。有沒有辦法使用列表調用這些函數?例當 counter=0=>list[0]=>字符串為 'function1'=> 調用 function1()再次按下按鈕counter=1=>list[1]=>字符串為'function2' => call function2()
查看完整描述

2 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

與@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


這就是我思考解決問題的方式。


查看完整回答
反對 回復 2022-08-16
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

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


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]()


查看完整回答
反對 回復 2022-08-16
  • 2 回答
  • 0 關注
  • 95 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號