共计 1268 个字符,预计需要花费 4 分钟才能阅读完成。
在 Python 中,咱们有时会遇到须要动态创建变量名的状况,即在运行时生成变量名。Python 提供了一种办法能够实现这一点,即通过应用内置的 globals()
或 locals()
函数。然而,须要留神的是,动态创建变量并不是一种举荐的做法,因为它可能会导致代码的可读性和可维护性升高。不过,理解这种办法能够帮忙咱们更深刻地了解 Python 的工作原理。
首先,咱们来看一下如何应用 globals()
函数动态创建变量。globals()
函数返回一个字典,该字典示意以后全局符号表,这包含所有导入的模块和定义的函数、类、变量等。咱们能够批改这个字典来动态创建变量。例如:
for i in range(5):
globals()[f"var{i}"] = i * i
在这个例子中,咱们创立了 5 个变量,名字别离为 var0
、var1
、var2
、var3
和 var4
,它们的值别离是 0、1、4、9 和 16。
而后,咱们能够通过间接应用变量名来拜访这些变量:
print(var0) # 输入:0
print(var1) # 输入:1
print(var2) # 输入:4
print(var3) # 输入:9
print(var4) # 输入:16
locals()
函数的用法与 globals()
函数相似,但它返回的是以后部分符号表的字典。如果在函数外部应用 locals()
函数,那么它将返回该函数的局部变量。须要留神的是,尽管能够应用 locals()
函数获取局部变量,但批改返回的字典并不能真正扭转局部变量。例如:
def test():
for i in range(5):
locals()[f"var{i}"] = i * i
print(var0) # NameError: name 'var0' is not defined
test()
在这个例子中,尝试拜访 var0
会导致 NameError
,因为批改 locals()
返回的字典并不能真正创立局部变量。
只管 Python 提供了动态创建变量的办法,但通常咱们不举荐这样做。动态创建变量可能会导致代码难以了解和保护,因为咱们不能间接看到所有的变量名。在大多数状况下,应用数据结构(如列表或字典)来存储数据会更好。例如,咱们能够应用字典来代替下面的例子:
vars = {}
for i in range(5):
vars[f"var{i}"] = i * i
print(vars["var0"]) # 输入:0
print(vars["var1"]) # 输入:1
print(vars["var2"]) # 输入:4
print(vars["var3"]) # 输入:9
print(vars["var4"]) # 输入:16
在这个例子中,咱们创立了一个字典 vars
,并应用循环来填充它。而后,咱们能够通过键来拜访字典中的值。这种办法的益处是,咱们能够立刻看到所有的数据都存储在 vars
字典中,而不须要查找多个动态创建的变量。
总的来说,尽管 Python 提供了动态创建变量的办法,但在大多数状况下,应用数据结构来存储数据会更好。如果你的确须要动态创建变量,那么请确保你明确这样做的结果,并尽量使你的代码放弃清晰和可保护。