Python 如何运行拼接后的方法?

狂天 · 2022年03月30日 · 最后由 rhyme 回复于 2022年04月01日 · 3493 次阅读

一般 python 中运行方法是这样:

我把我想要按顺序执行的方法写到一个 list 里

然后通过方法名 +() 的形式拼出我要运行方法

现在问题来了,这样拼出的方法可咋执行呢?请教下各位大佬

最佳回复
共收到 21 条回复 时间 点赞
def test1():
    print(1)

def test2():
    print(2)

function_dict = {
  "test1": test1,
  "test2": test2
}
for function in function_dict.values():
    function()

#或者
function_list = ["test1","test2"]
for function in function_list:
    function_dict[function]()

#又或者
for function in function_list:
    exec(function+'()')

#又或者
for function in function_list:
    eval(function)()

输出

这意思?

list = [test1, test2, test3, test4]
for i in list:
i()
一定要字符串么,直接这样不行么?

我也想知道😳

把你想要运行的方法又都装在一个方法里 调用这个方法去执行它们😂

反射或者 exec

9楼 已删除
18楼 已删除
狂天 #11 · 2022年03月31日 Author
kangaroo 回复

简洁明了,N 币

狂天 #10 · 2022年03月31日 Author
rhyme 回复


试了一下,这样不行

java 用反射 python 应该也有类似的方法

python 代码从上到下执行的,挨个调用不好吗,搞这么多愚蠢的代码太不优雅了,就像 LS 一样,让别人怎么看得下去。

class Example(object):
    def __init__(self):
        pass
    def run(self):
        print("run")

    def start(self):
        print("start")

    def end(self):
        print("end")

if __name__ == '__main__':
    e = Example()
    list =["run","start","end"]
    for i in list:
        attr = getattr(e,i)
        attr()
重来看雨 回复

学到了学到了 谢谢大佬

kangaroo 回复

学到了学到了 谢谢大佬

综合了上面大佬们的指点,都试了一下

getattr 了解下

反射或者 eval()

狂天 回复

你的 list 不要放字符串啊,直接放方法名,不可能不行的

没太明白楼主的真实意图,这样只是拼出来字符串而已

楼主的意思是拼接出来的是字符串,然后有对应的方法,然后怎么执行这个方法对吧。可以试试动态引用库,importlib.import_module

这怎么执行,run() 是一个 function 对象,你拼接出来的是'run()'是一个字符串,将字符串转换为 function 对象?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册