python如何运算字符串里的函数

python如何运算字符串里的函数

作者:Joshua Lee发布时间:2026-01-14阅读时长:0 分钟阅读次数:4

用户关注问题

Q
如何在Python中执行字符串形式的函数?

我有一个包含函数调用的字符串,例如'math.sqrt(16)',怎样才能在Python中执行该函数并得到结果?

A

使用eval函数执行字符串中的函数表达式

可以使用Python内置的eval()函数来执行字符串中的函数调用。首先,需要确保相关的模块已经导入,如import math,然后可以通过eval('math.sqrt(16)')执行字符串表达式并获得结果。不过,使用eval存在安全风险,避免执行不受信任的字符串。

Q
如何安全地解析并执行字符串里的函数调用?

eval()函数虽然方便,但不安全。如果我要在Python中安全地运行字符串中的函数调用,有哪些方法可行?

A

使用ast模块或限定环境下的eval实现安全函数执行

可以借助ast.literal_eval()解析字符串中安全的字面量,但它不支持函数调用。另一种做法是在eval中传入有限的字典作为环境,只暴露需要调用的函数。例如,定义一个字典{'sqrt': math.sqrt},调用eval('sqrt(16)', {}, {'sqrt': math.sqrt})。这样能减少安全隐患,同时允许执行指定函数。

Q
如何从字符串动态调用Python函数?

如果我得到一个函数名的字符串,如'sqrt',怎样把它转化成函数对象并调用?

A

使用内置函数globals()或getattr来获取函数对象

可以通过内置函数globals()或locals()从字符串对应的函数名获取函数对象。例如,函数名存储在变量func_name='sqrt',要调用math模块的sqrt函数,可以写func = getattr(math, func_name),然后使用func(16)得到结果。这种方法避免了使用eval,较为安全。