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

Python中动态创建变量后按名称直接访问的实现方法咨询

解决Python动态创建变量后的访问问题

首先,你的代码里print(u_{i})报错的原因很直接——这是无效的Python语法。Python不会自动把{i}替换成变量i的值来生成变量名,这种写法本身就不符合变量命名规则,所以解释器会直接报错。

先给你快速解决当前问题的方法

如果想在循环里或者循环后访问这些动态创建的变量,有两种可行方式:

  1. 直接写变量名:比如你已经创建了u_1到u_10,直接写print(u_1)、print(u_5)就能正常输出,这部分你之前已经验证过是可行的。
  2. 通过globals()动态访问:如果需要在循环中或者通过变量i的值来访问对应的变量,还是得用你创建变量时的方式,比如:
NG=10
for i in range(1, NG+1 ):
    globals()[f"u_{i}"] = i

# 循环打印所有动态创建的变量
for i in range(1, NG+1 ):
    print(globals()[f"u_{i}"])

# 访问特定的变量,比如u_3
print(globals()["u_3"])

更重要的:不推荐用globals()创建动态变量

虽然这种方式能实现需求,但在Python里这是不推荐的做法,原因有几个:

  • 污染全局命名空间,很容易和其他变量重名导致意外覆盖,调试起来特别麻烦。
  • 代码可读性差,其他开发者看到u_1这类变量会困惑它的来源。
  • 后续维护成本高,比如要修改、删除这些变量时,很难批量操作。

更好的替代方案:用字典或命名空间存储

字典天生就是用来存储键值对的,完全能满足你的需求,而且更规范、更灵活:

NG=10
u_vars = {}  # 创建一个空字典
for i in range(1, NG+1 ):
    u_vars[f"u_{i}"] = i

# 通过键名直接访问,和你想要的"变量名访问"逻辑一致
print(u_vars["u_1"])
print(u_vars["u_10"])

# 循环遍历所有键值对
for name, value in u_vars.items():
    print(f"{name} = {value}")

如果觉得用字典的[]访问不够直观,还可以用types.SimpleNamespace来实现类似属性的访问方式,和直接访问变量的体验几乎一致:

from types import SimpleNamespace

NG=10
u_vars = SimpleNamespace()
for i in range(1, NG+1 ):
    setattr(u_vars, f"u_{i}", i)

# 直接用点语法访问
print(u_vars.u_1)
print(u_vars.u_5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:04:04