Python 将lambda字符串转换为lambda函数签名
假设我有一个传入字符串,它是一个python函数,我想将其转换为python签名。我可以使用importlib函数来实现这一点 例如,假设我有一个传入字符串“os.getenv”,我想解析为相应的函数签名。我可以做下面这样的事情Python 将lambda字符串转换为lambda函数签名,python,python-3.x,lambda,Python,Python 3.x,Lambda,假设我有一个传入字符串,它是一个python函数,我想将其转换为python签名。我可以使用importlib函数来实现这一点 例如,假设我有一个传入字符串“os.getenv”,我想解析为相应的函数签名。我可以做下面这样的事情 >>> import importlib >>> fn = "os.getenv" >>> package_signature = importlib.import_module("os") >>>
>>> import importlib
>>> fn = "os.getenv"
>>> package_signature = importlib.import_module("os")
>>> getattr(package_signature, "getenv")
当函数是lambda函数时,如何解析和返回函数。例如,类似于
fn=“lambda x:'a'+x”
您可以通过使用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一起使用。然后您必须使用exec
,例如:
exec("def fun(x): return 'a' + x")
fun('b')
# yields 'ab'
在代码中使用
eval()
或exec()
时,任何地方都要小心,例如,当您编写web应用程序并考虑执行某些用户输入时。有几种方法可以利用这些功能。只要在谷歌上搜索“exec python漏洞”或类似的东西,你就会发现很多信息。使用eval()
?这可能是重复的感谢,但我希望除了eval之外还有其他东西。