如何使用for语句在python中创建数千个变量

Posted

技术标签:

【中文标题】如何使用for语句在python中创建数千个变量【英文标题】:How to use the for statement to create thousands of variables in python 【发布时间】:2015-06-16 19:45:18 【问题描述】:

如果你想在 Python 中创建数以万计的变量,有没有办法在 for 语句中做到这一点。我想要的是一个代码,当给定一个数字和一个值时,它可以创建该数量的变量并为其分配该值。

def createVars(num, somevalue):
    for x in range(num):
        var1 = somevalue
        var2 = somevalue

这个想法是让循环继续生成具有可靠名称(var3、var4 等)的变量并将它们分配给某个给定值。您如何使这个系统能够创建变量而无需明确命名所有变量?

【问题讨论】:

使用localsglobals 我们是否都忘记了mylist[0]mylist.get('var_0')var_0 一样是真实的变量? 你不需要这个。使用列表。这就是列表的用途。 OP,很可能,您实际上并不想这样做。如果您需要数千个变量,请将它们放在一个容器中并像 var[1] 而不是 var1 那样访问它们。您尝试这样做的方式是逆流而行。 此外:即使您接受的答案是使用容器来访问您的所有变量。它恰好是已经存在的 python var 表。让自己更轻松,并了解关键字“列表”和列表简写语法,例如[1, 2, 3] 【参考方案1】:

你可以使用 globals():

>>> for i in xrange(10):
...     globals()["x%d" % i] = i
... 
>>> x0
0
>>> x1
1
>>> x2
2
>>> x10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x10' is not defined

【讨论】:

这在技术上是可行的,但我有 99.9% 的把握,如果提问者知道它们,listdict 或类似的数据结构是他们想要的。这就像一个问题,当所需的形状只是字母时,如何在控制台上绘制形状,而真正的问题应该是“我如何打印?”。 这甚至行不通。我厌倦了人们在它甚至不起作用时告诉其他人这样做。 Modifying locals() like that doesn't actually affect a function's local variables. 好吧,建议使用globals() 而不是locals(),因为locals() 在CPython 中的函数内部不起作用。根据 API 文档,永远不能保证对 locals() 的更新会实际更新本地符号表,建议您不要修改它。见这里:docs.python.org/2/library/functions.html#locals 这个问题很经典XY problem。很明显 OP 的问题是什么,OP 尝试的解决方案是可怕的,并且您坚持尝试提供使 OP 尝试的解决方案起作用的方法,而没有提及解决潜在问题的最佳方法。您现在正在制作全局变量。这不是一个巨大的进步。您是否想给 OP 一种印象,即每当他需要存储 N 个东西时,他就需要 N 个 global 变量?当他需要递归函数时会发生什么? @electron1:您所考虑的应用程序最好使用列表来完成。 for thing in l: thing.method()。如果你真的想要,你甚至可以写在一行上。使用 2000 个命名变量来做到这一点会更加困难和尴尬。【参考方案2】:
def createVars(num, somevalue):
   l = ['var'+str(x):somevalue for x in xrange(num)]
   return l

【讨论】:

因为密钥基本上只是一个数字,这可能只是return [somevalue for n in xrange(num)](或range对于Python 3)。

以上是关于如何使用for语句在python中创建数千个变量的主要内容,如果未能解决你的问题,请参考以下文章

使用 for 循环在 python 中创建一个冗长的变量名列表

如何在 Python 中创建多个 for 循环列表的递归以获得组合? [复制]

在 pandas for python 中创建虚拟变量

DBT 模型:如何从查询中创建变量并在 If 语句中使用它

如何在python中创建二维列表

如何在 Python 中创建多个嵌套文件夹?