让我们说我有一个传入的字符串,它是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"
答案 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漏洞”之类的内容,您就会发现很多信息。