有没有一种方法可以使用用户输入来调用函数?

时间:2020-09-12 15:59:48

标签: python

我知道字符串是不可调用的,但是能够使用这样的代码会很好。

if c.count < 3 {
  return 0;
}

for var i in 0..<c.count-2 {
  // now you can safely access c[i+2]
}

3 个答案:

答案 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前面警告的那样,该方法使用户能够调用任何可能也是恶意的或具有破坏​​性的代码。