我知道字符串是不可调用的,但是能够使用这样的代码会很好。
if c.count < 3 {
return 0;
}
for var i in 0..<c.count-2 {
// now you can safely access c[i+2]
}
答案 0 :(得分:3)
有几种方法:
最简单的方法是,收集字典中所有符合条件的函数:
functions = {f.__name__: f for f in [test1, test2, test3, test4, test5, test6]}
functions[input(">")]()
或者,以一种偷偷摸摸的方式,使用globals()
,要小心,您将有效地允许用户调用全局范围内的任何函数,而不仅仅是您认为应该拥有的函数:>
globals()[input(">")]()
或者使用eval()
的超级偷偷摸摸的方式,或者如果您是在循环中执行此操作,只需启动外壳程序以允许使用code.interact()
进行完全任意的代码执行,这也将允许用户指定功能参数,如果运行代码的用户帐户有权这样做,请重新格式化硬盘:
import code
code.interact()
答案 1 :(得分:1)
您可以使用功能字典。
def test1():
print('7')
def test2():
print('7')
def test3():
print('7')
def test4():
print('7')
def test5():
print('7')
d={'test1':test1,'test2':test2,'test3':test3,'test4':test4,'test5':test5}
i = input(">") #assume the input is one of the function names
d.get(i)()
答案 2 :(得分:0)
您可以使用ast模块:
from ast import literal_eval
literal_eval(input("What do you want to make me do? ")
literal_eval让我们调用包含有效python代码的字符串。但是,正如Lie Ryan前面警告的那样,该方法使用户能够调用任何可能也是恶意的或具有破坏性的代码。