如何动态创建变量?

228 投票
8 回答
583075 浏览
提问于 2025-04-16 12:02

我想在Python中动态地创建变量。有没有人有什么好主意可以做到这一点?

8 个回答

86

使用 exec() 方法可以运行任意的代码。比如说,你有一个字典,想把每个键变成一个变量,并且这个变量的值就是字典里对应的值,你可以这样做:

>>> c = {"one": 1, "two": 2}
>>> for k, v in c.items():
...     exec(f"{k} = {v}")
... 
>>> one
1
>>> two
2
123

globals() 这个函数会返回一个包含当前模块所有变量的字典。你可以通过在这个字典上创建一个新的键来新建一个变量:

# By default, a module has some hidden variables defined
print({k: v for k, v in globals().items() if not k.startswith("__")})

for i in range(1, 11):
    globals()[f"my_variable_{i}"] = i

print()
print(my_variable_1)
print(my_variable_2)
# and so on

print()
print({k: v for k, v in globals().items() if not k.startswith("__")})

结果:

{}

1
2

{'i': 10, 'my_variable_1': 1, 'my_variable_2': 2, 'my_variable_3': 3, 'my_variable_4': 4, 'my_variable_5': 5, 'my_variable_6': 6, 'my_variable_7': 7, 'my_variable_8': 8, 'my_variable_9': 9, 'my_variable_10': 10}
208

除非真的有很强的需求去搞一堆复杂的变量名,否则我建议你使用字典。字典可以让你动态地创建键名,并且给每个键名关联一个值。

a = {}
k = 0
while k < 10:
    # dynamically create key
    key = ...
    # calculate value
    value = ...
    a[key] = value 
    k += 1

collections 模块 中,还有一些有趣的数据结构,可能也适合你的需求。

撰写回答