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

如何遍历命名规律相近的对象 无需重复编码且不使用eval

遍历规则命名实例的实现方案

核心原则:批量生成的同类型对象不要使用Car_1、Car_2这类带编号后缀的独立变量存储,从根源上用容器管理对象才是无额外开销、易维护的正确实现,完全不需要用到eval()。

推荐实现:创建实例时直接存入序列容器

新写代码直接放弃零散定义变量的思路,批量生成的实例直接存入列表,遍历操作零额外成本,是Python的标准实践:

# 一行代码生成100个Car实例,全部存入列表
cars = [Car() for _ in range(100)]

# 直接迭代列表即可完成所有实例的遍历
for car in cars:
    # 在此处编写每个实例需要执行的逻辑
    car.refuel()
    car.drive()

如果需要匹配原来的编号逻辑,直接用列表下标做偏移即可:cars[0]对应原来的Car_1,cars[i]对应原来的Car_{i+1},也可以根据需求调整索引起始位置。

兼容实现:适配已存在零散变量的遗留代码

如果是已经写完的老代码,已经定义了Car_1到Car_100的独立变量、重构成本太高,可以直接读取Python命名空间的内置字典获取变量,没有eval()的字符串解析、代码执行开销,性能和普通变量查找一致:

cars = []
# 变量定义在全局作用域用globals(),定义在函数内部就替换为locals()
current_namespace = globals()
for num in range(1, 101):
    cars.append(current_namespace[f"Car_{num}"])

# 后续遍历逻辑和上述方案完全一致
for car in cars:
    car.park()

注意:该方案仅用于兼容不可修改的遗留代码,不要在新代码中使用。零散定义批量同类型变量本身就是反模式,会污染命名空间,后续增删、查找实例的维护成本极高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:15:29