我想使用eval定义Python函数:
func_obj = eval('def foo(a, b): return a + b')
但它返回无效的语法错误? 我该怎么做?
顺便说一下,如何在Python中将函数obj转换为字符串对象?
答案 0 :(得分:5)
使用exec
。 eval
用于表达式而不是语句。
>>> 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)
您可以将eval
与lambda
一起使用,例如:
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
。
如何从字符串测试代码?