You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串转为变量名?适配itertools.product可变变量数量需求

解决方案

最优方案:使用序列容器+解包语法

不需要把字符串变量名转成实际变量,更简洁安全的做法是把所有需要传入itertools.product的序列统一放到一个列表/元组中,再通过*解包传入:

import itertools

# 示例变量(数量可任意增减)
list_a = [1, 2, 3]
list_b = ["x", "y"]
list_c = [True, False]

# 将所有待组合的序列存入容器
target_sequences = [list_a, list_b, list_c]

# 用*解包容器,传入product
all_list_combinations = itertools.product(*target_sequences)

这种方式完全适配变量数量不固定的场景,而且代码可读性高,避免了操作命名空间的风险。

处理字符串变量名的备选方案(不推荐)

如果确实需要从字符串形式的变量名获取对应变量,可以通过globals()或locals()获取当前命名空间的变量映射,但这种方式存在命名冲突、报错风险(比如字符串对应的变量不存在),仅作参考:

import itertools

# 示例变量名字符串列表
var_name_list = ["list_a", "list_b", "list_c"]
# 从全局命名空间中提取对应变量
target_sequences = [globals()[name] for name in var_name_list]

all_list_combinations = itertools.product(*target_sequences)

关于compile()失败的说明

compile()是用来编译代码片段的,对于你的场景来说完全没必要,反而会增加代码复杂度和安全风险,上面的两种方案(尤其是第一种)已经能完美解决问题。

内容的提问来源于stack exchange,提问作者user19309369

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:15:55