用户输入的Python调用函数

时间:2011-02-27 16:52:52

标签: python

您可以通过用户输入调用函数吗?像这样:

def testfunction(function):
    function()

a = raw_input("fill in function name: "
testfunction(a)

因此,如果您填写现有函数,它将执行它。

3 个答案:

答案 0 :(得分:3)

你正在做的是糟糕的坏事:P但是,它完全有可能。

a = raw_input("Fill in function name:")
if a in locals().keys() and callable(locals()['a']):
    locals()['a']()
else:
    print 'Function not found'

locals()返回当前可用的所有对象及其名称的字典。所以,当我们说a in locals().keys()我们说,“有没有任何对象叫”。如果有,我们可以通过locals()['a']获取它,然后使用callable测试它是否是一个函数。如果那是True,那么我们调用该函数。如果不是,我们只需打印"Function not found"

答案 1 :(得分:2)

是的,你可以,虽然这通常是一个坏主意和一个很大的安全风险。

def testfunc(fn):
    fn()

funcname = raw_input('Enter the name of a function')
if callable(globals()[funcname]):
    testfunc(globals()[funcname])

答案 2 :(得分:2)

我可能会将这种行为封装在一个类中:

class UserExec(object):
    def __init__(self):
        self.msg = "hello"
    def get_command(self):
        command = str(raw_input("Enter a command: "))
        if not hasattr(self, command):
            print "%s is not a valid command" % command
        else:
            getattr(self, command)()
    def print_msg(self):
        print self.msg
a = UserExec()
a.get_command()

正如其他人所说,这是一种安全风险,但是你对输入的控制越多,风险就越小;把它放在一个包含仔细输入审查的课程中。