在Python中,咱们有时会遇到须要动态创建变量名的状况,即在运行时生成变量名。Python提供了一种办法能够实现这一点,即通过应用内置的 globals()或 locals()函数。然而,须要留神的是,动态创建变量并不是一种举荐的做法,因为它可能会导致代码的可读性和可维护性升高。不过,理解这种办法能够帮忙咱们更深刻地了解Python的工作原理。

首先,咱们来看一下如何应用 globals()函数动态创建变量。globals()函数返回一个字典,该字典示意以后全局符号表,这包含所有导入的模块和定义的函数、类、变量等。咱们能够批改这个字典来动态创建变量。例如:

for i in range(5):    globals()[f"var{i}"] = i * i

在这个例子中,咱们创立了5个变量,名字别离为 var0var1var2var3和 var4,它们的值别离是0、1、4、9和16。

而后,咱们能够通过间接应用变量名来拜访这些变量:

print(var0)  # 输入:0print(var1)  # 输入:1print(var2)  # 输入:4print(var3)  # 输入:9print(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 definedtest()

在这个例子中,尝试拜访 var0会导致 NameError,因为批改 locals()返回的字典并不能真正创立局部变量。

只管Python提供了动态创建变量的办法,但通常咱们不举荐这样做。动态创建变量可能会导致代码难以了解和保护,因为咱们不能间接看到所有的变量名。在大多数状况下,应用数据结构(如列表或字典)来存储数据会更好。例如,咱们能够应用字典来代替下面的例子:

vars = {}for i in range(5):    vars[f"var{i}"] = i * iprint(vars["var0"])  # 输入:0print(vars["var1"])  # 输入:1print(vars["var2"])  # 输入:4print(vars["var3"])  # 输入:9print(vars["var4"])  # 输入:16

在这个例子中,咱们创立了一个字典 vars,并应用循环来填充它。而后,咱们能够通过键来拜访字典中的值。这种办法的益处是,咱们能够立刻看到所有的数据都存储在 vars字典中,而不须要查找多个动态创建的变量。

总的来说,尽管Python提供了动态创建变量的办法,但在大多数状况下,应用数据结构来存储数据会更好。如果你的确须要动态创建变量,那么请确保你明确这样做的结果,并尽量使你的代码放弃清晰和可保护。