繁体   English   中英

我可以使用“eval”在 Python 中定义函数吗?

[英]Can I use 'eval' to define a function in Python?

我想使用 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"

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

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

如何从字符串测试代码?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM