例如,我有:
def function():
return
我希望通过以下方式执行:
d = input('Enter the def name: ')
输入def名称(在这种情况下为'function')。
我该怎么做?
=================== EDIT ========================== < / p>
找到了方法!
def func():
print('IT WORKS!')
r = raw_input('Function: ')
result = eval(r+'()')
答案 0 :(得分:0)
关于@ jonrsharpe的评论,你可以通过模块的命名空间获得一个函数。如果您已经使用该功能的模块,您可以
f_name = raw_input('Enter the def name: ')
globals()[f_name]()
在这种情况下,如果名称不正确,则引发KeyError。
如果该功能位于不同的模块中,您可以
import functions
f_name = raw_input('Enter the def name: ')
getattr(functions, f_name)()
在这种情况下,如果名称不正确,则会引发AttributeError。
答案 1 :(得分:0)
def function():
print "In function"
return
available_functions = {'function':function}
d = raw_input('Enter the def name: ')
available_functions[d]()
输出:
Enter the def name: function
In function
在字典中定义可用的函数。您可以使用它来确定是否存在此类函数。然后,您只需要调用在字典中映射的内容。
available_functions = {'function':function}
,将输入function
映射到函数名function
。它通过以下行调用:available_functions[d]()
如果用户传递了一个不存在的函数,则会出现一个关键错误:
Enter the def name: nonasdf
Traceback (most recent call last):
File "in_test.py", line 11, in <module>
available_functions[d]()
KeyError: 'nonasdf'
您可以在try/except
周围包裹available_functions[d]()
以捕获此内容并输出更友好的消息:
try:
available_functions[d]()
except KeyError:
print "Function doesn't exist"
答案 2 :(得分:0)
以下是实现目标的几种不安全且安全的方法:
def function():
print "In 'function()'"
return 7
# Unsafe way
d = input('Type "function()": ')
print "The result is",d
# Only slightly safer
d = input('Type "function": ')
d = d()
print 'The result is', d
# Safer still, but still dangerous
d = raw_input('Type "function": ')
d = vars()[d]()
print 'The result is', d
# Probably the safest way:
commands = {
'function': function
}
def default_command():
print "Oops"
return 0
d = raw_input('Type "function": ')
d = commands.get(d, default_command)
d = d()
print 'The result is', d