查看原文
其他

Python竟然可以动态创建变量

harveyx harvey的网络日志 2024-05-06

写在前面

在 Python 中,创建变量的过程其实非常简单。当我们为变量赋值时,Python 会自动创建该变量并将其与特定的值关联起来。例如,以下代码段:

x = 5

我们创建了一个名为x的变量,并将其赋值为整数值 5。

现在我们考虑一个问题,如果我想一次性创建a-z共26个变量,或者更多变量

我们可以直接一行行的创建,这当然是可以的,但是python中可以有更优雅的解决方案。让我们一起来探究。

认识globals()函数

内置函数globals()在 Python 中返回一个字典,其中包含所有已存在的全局变量。通过调用globals(),我们可以在代码中访问和操作这些变量。

让我们通过一个示例来理解globals()的工作原理。假设我们定义了以下变量:

x = 4
y = 5
z = 6

如果我们打印globals(),将会得到一个字典,其中包含多个内容,例如'__name__': '__main__''__doc__': None,这些是内置的属性。在globals()字典的末尾,我们会找到项'x': 4'y': 5'z': 6,它们表示我们创建的全局变量。

print(globals())

输出:

{ ..., 'x': 4, 'y': 5, 'z': 6}

动态添加变量

现在,让我们考虑一种情况,我们希望使用globals()动态添加变量。我们可以通过以下方式实现与直接赋值相同的结果:

x = 5

这与以下代码等效:

globals()['x'] = 5

这两种方法都会创建一个名为x的全局变量,并赋予其值为5。

你可能会想为什么我们要使用globals()来动态添加变量?而不是直接赋值。当需要以编程方式创建大量变量时,使用globals()的优势就显而易见了。手动逐个变量赋值可能会很繁琐且容易出错。然而,通过使用globals(),我们可以自动化这个过程。

回到文章开头的问题,我们使用从1到26的值为变量az赋值:

for i in range(26):
    globals()[chr(ord('a') + i)] = i + 1

我们很容易就创建了a-z共26个变量,对应的值为1-26

在这种情况下,chr(ord('a') + i)生成适当的字母字符,而i + 1为变量赋予相应的值。使用globals()允许我们在不显式编写每个赋值语句的情况下动态创建这些变量。

写在最后

Python中的globals()函数提供了对全局变量字典的访问。它使我们能够在代码中动态操作和创建变量,提供了灵活性和自动化的可能性。

通过充分利用globals()的功能,我们可以简化动态创建变量的过程,在需要大量变量生成的情况下节省时间和精力。


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存