将Lambda字符串转换为Lambda函数签名

时间:2018-07-19 14:01:27

标签: python python-3.x lambda

让我们说我有一个传入的字符串,它是python函数,我想将其转换为python签名。我可以使用importlib函数来做到这一点。

例如,假设我有一个传入字符串“ os.getenv”,我想解析为相应的函数签名。我可以做下面的事情。

>>> import importlib
>>> fn = "os.getenv"
>>> package_signature = importlib.import_module("os")
>>> getattr(package_signature, "getenv")

当函数是lambda函数时,如何解析和返回函数。例如类似fn = "lambda x: 'a' + x"

1 个答案:

答案 0 :(得分:0)

您可以像下面这样使用eval()来实现此目的:

function_str = "lambda x: 'a' + x"    
fn = eval(function_str)

test_input = ['a', 'b', 'c']

print(list(map(fn, test_input)))
# Outputs: ['aa', 'ab', 'ac']

以下是Python文档中的相应部分:eval()

您只能使用语句来执行此操作,因此定义函数将不适用于eval。然后,您将不得不使用exec,例如:

exec("def fun(x): return 'a' + x")

fun('b')
# yields 'ab'

在代码中使用eval()exec()时,例如在编写Web应用程序并考虑执行某些用户输入时,任何地方都要小心。有两种利用这种功能的方法。只需在Google上查找类似“ exec python漏洞”之类的内容,您就会发现很多信息。