如何使用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 等)的变量并将它们分配给某个给定值。您如何使这个系统能够创建变量而无需明确命名所有变量?
【问题讨论】:
使用locals
或globals
我们是否都忘记了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% 的把握,如果提问者知道它们,list
、dict
或类似的数据结构是他们想要的。这就像一个问题,当所需的形状只是字母时,如何在控制台上绘制形状,而真正的问题应该是“我如何打印?”。
这甚至行不通。我厌倦了人们在它甚至不起作用时告诉其他人这样做。 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 中创建一个冗长的变量名列表