一般 python 中运行方法是这样:
我把我想要按顺序执行的方法写到一个 list 里
然后通过方法名 +() 的形式拼出我要运行方法
现在问题来了,这样拼出的方法可咋执行呢?请教下各位大佬
eval(i+"()")
楼主的意思是拼接出来的是字符串,然后有对应的方法,然后怎么执行这个方法对吧。可以试试动态引用库,importlib.import_module
eval(i+"()")
这怎么执行,run() 是一个 function 对象,你拼接出来的是'run()'是一个字符串,将字符串转换为 function 对象?
我也想知道
把你想要运行的方法又都装在一个方法里 调用这个方法去执行它们
输出
这意思?
反射或者 exec
没太明白楼主的真实意图,这样只是拼出来字符串而已
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()
一定要字符串么,直接这样不行么?
java 用反射 python 应该也有类似的方法
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()
综合了上面大佬们的指点,都试了一下
getattr 了解下
反射或者 eval()
python 代码从上到下执行的,挨个调用不好吗,搞这么多愚蠢的代码太不优雅了,就像 LS 一样,让别人怎么看得下去。