您可以通过用户输入调用函数吗?像这样:
def testfunction(function):
function()
a = raw_input("fill in function name: "
testfunction(a)
因此,如果您填写现有函数,它将执行它。
答案 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()
正如其他人所说,这是一种安全风险,但是你对输入的控制越多,风险就越小;把它放在一个包含仔细输入审查的课程中。