为了账号安全,请及时绑定邮箱和手机立即绑定

如何在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 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信