Python将字符串转为可执行函数,并获取函数的入参、入参默认值、入参类型
时间: 2024-09-09 17:02:20 浏览: 30
在Python中,可以使用内置的`eval()`函数将字符串转换为可执行的代码,但这通常不推荐使用,因为`eval()`会执行字符串内的任何Python表达式,这可能会带来安全风险。更安全的做法是使用`ast.literal_eval()`来执行Python字面量表达式。还有`exec()`函数,它可以执行动态生成的Python代码,但同样要注意安全性问题。
对于获取函数的参数、参数默认值和参数类型,这通常是针对已经存在的函数对象操作的。可以使用内置的`inspect`模块来获取这些信息。以下是一个示例代码:
```python
import inspect
# 假设我们有一个函数
def example_function(a, b=2, c='default'):
pass
# 使用inspect模块获取函数的信息
source = inspect.getsource(example_function)
code = compile(source, '', 'exec')
namespace = {}
exec(code, namespace)
function = namespace['example_function']
# 获取参数信息
argspec = inspect.getfullargspec(function)
# 输出参数信息
print("参数列表:", argspec.args)
print("参数默认值:", argspec.defaults)
print("参数类型:", [type(arg) for arg in argspec.args])
```
在这个示例中,我们首先导入了`inspect`模块,然后通过`inspect.getsource()`函数获取了函数的源代码,接着使用`compile()`函数将源代码编译成代码对象。之后我们使用`exec()`函数在命名空间中执行编译后的代码,并从中获取到函数对象。最后,我们使用`inspect.getfullargspec()`函数获取了函数的参数信息,包括参数列表、参数默认值和参数类型。
请注意,动态执行代码(尤其是来自不可信源的代码)应该非常谨慎,以避免潜在的安全风险。
阅读全文