Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将lambda字符串转换为lambda函数签名_Python_Python 3.x_Lambda - Fatal编程技术网

Python 将lambda字符串转换为lambda函数签名

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") >>>

假设我有一个传入字符串,它是一个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”

您可以通过使用
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之外还有其他东西。