我可以使用'eval'在Python中定义一个函数吗?

时间:2013-11-02 12:57:45

标签: python python-2.7 eval

我想使用eval定义Python函数:

func_obj = eval('def foo(a, b):  return a + b')

但它返回无效的语法错误? 我该怎么做?

顺便说一下,如何在Python中将函数obj转换为字符串对象?

4 个答案:

答案 0 :(得分:5)

使用execeval用于表达式而不是语句。

>>> exec 'def foo(a, b):  return a + b'
>>> foo(1, 2)
3

功能对象的功能代码:

def func():
    """ I'm func """
    return "Hello, World"
... 
>>> import inspect
>>> print inspect.getsource(func)
def func():
    """ I'm func """
    return "Hello, World"

答案 1 :(得分:2)

您可以将evallambda一起使用,例如:

func_obj = lambda a, b: eval('a + b')

答案 2 :(得分:2)

def test_eval():
    exec('def foo(a, b):  return a + b')   
    foo(1, 2)

@niitsuma该代码将返回错误:NameError: name 'foo' is not defined

这是因为foo是在执行它的其他范围中定义的。要对其进行修复并使其在所有范围内可见,可以使foo全局变量为

def test_eval():
    exec('global foo\ndef foo(a, b):  return a + b')   
    foo(1, 2)

答案 3 :(得分:0)

我写了

def test_eval():
    exec('def foo(a, b):  return a + b')   
    foo(1, 2)
mypackage/tests/test_mycode.py

带有适当的mypackage/setup.py。 但是python setup.py test原因 NameError: name 'foo' is not defined

如何从字符串测试代码?