如何从输入中执行python中的def

时间:2014-10-08 15:51:23

标签: python python-2.7 function

例如,我有:

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+'()')

3 个答案:

答案 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