python - 如何动态更改字符串中变量的值?

标签 python

我从文本 e-g s = "a&(b|c)" 中提取了一个数学字符串,并且我想使用 eval(s) 但在此之前,我必须为变量赋值,例如:

a, b, c  = somefuction()

我如何动态地执行此操作

r = re.findall("\w+", s)    
r[0], r[1], r[2] = somefunction()

然后将这些值传回变量并对其使用eval()。 我的最终输出应该根据 a、b、c 的值给出 True 或 False

最佳答案

假设 findall 确实正确找到了您的变量,并且您的函数返回了适当的元组,那么您可以使用 exec 来设置变量:

r = re.findall("\w+", s)
vars = ', '.join(r)
exec(vars + ' = somefunction()')

在您的示例中,这将构造字符串 a, b, c = somefunction() 并执行它,从而在当前命名空间中设置变量。

由于您在评论中指出变量的数量可能会有所不同,因此您可能希望将该数字发送到您的函数:

exec('{} = somefunction({})'.format(vars, len(r)))

或者,如果您的函数始终返回相同数量的元素,但根据提取的数学表达式可能不会使用一个或多个元素,您可能需要附加或前置 _ (下划线)到 vars 字符串中以取代未使用的值。

关于python - 如何动态更改字符串中变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63652108/

相关文章:

python - 关于 Python 中的数组 (Numpy)

python - 每次为 Pandas DataFrame 获取相同的哈希值

python - 如何在 Python 中返回解压后的列表?

python - 如何使用 request 和 bs4 模块而不是使用 Virustotal 的 PublicAPI 来获得 Virustotal 上 filehashes 的声誉?

python - 守护进程模式下的 Pyramid uWSGI 日志记录不起作用

python - pandas: dataframe to_csv,如何设置列名

python - 如何以 Pythonic 方式将多个列表分组为单个列表?

python - Cassandra 未完成与 EventletConnection 的连接

python - 如何使用默认和非托管数据库运行 Django 单元测试?

Python ephem 模块无法识别看似有效的纬度字符串