我想使用 eval 定义一个 Python 函数:
func_obj = eval('def foo(a, b): return a + b')
但它返回无效的语法错误?我怎样才能做到?
顺便说一句,如何在 Python 中将函数 obj 转换为字符串对象?
我想使用 eval 定义一个 Python 函数:
func_obj = eval('def foo(a, b): return a + b')
但它返回无效的语法错误?我怎样才能做到?
顺便说一句,如何在 Python 中将函数 obj 转换为字符串对象?
使用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"
您可以使用eval
with lambda
,例如:
func_obj = lambda a, b: eval('a + b')
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)
我写
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
.
如何测试字符串中的代码?