【问题标题】:How do I use a variable in a loop to create specific variable names如何在循环中使用变量来创建特定的变量名
【发布时间】:2019-11-15 05:06:55
【问题描述】:

假设我想创建唯一的变量名称,例如 var1, var2var3

我想使用索引来创建变量 比如

counter = 0
while counter < 4:
  varcounter = ...

我知道在 perl 中会是这样的

while $counter < 4 {
  var$counter = ...
}

我只是想知道python中是否有等效的东西。

【问题讨论】:

标签: python


【解决方案1】:

您可以为此使用字典

your_dictionary = {}

i=0
while i<4:
    your_dictionary['var_'+str(i)] = i
    i+=1

输出

{
    "var_0": 0,
    "var_1": 1, 
    "var_2": 2,
    "var_3": 3
}

请不要使用exec,因为代码是从字符串执行的,它很容易破坏您的代码。这不是一个好习惯。此外,如果在函数内部使用,您不能使用它更新变量(感谢@Mars)。 execReactJS 中的dangerouslySetInnerHTMLjs 中的eval 类似,不建议在生产级应用程序中使用。

【讨论】:

  • @Mars 对不起,我把它和别的东西混在一起了,我已经更新了我的答案。谢谢
  • 不,你是对的。我必须对其进行测试并查找它,但在 python 3 中,它实际上在函数中的工作方式有所不同。我也同意 OP 在这里的解决方案是错误的,OP 应该使用字典,但我仍然想知道如何为技术知识做到这一点
  • here 得到了一些东西exec( a_string, globals(), locals() )。我从未测试过,但它可能会有所帮助。
  • 这似乎也行不通。你不能在 Py3 中使用 exec 创建新的变量——你只能将它们添加到一个字典中
  • 我很久以前就遇到过这个问题,是的,你是对的,这就是问题所在。这就是我不使用它的主要原因。再次感谢,我会更新我的答案。
【解决方案2】:

您可以通过以下方式在globals() 字典中定义变量,以编程方式在全局范围内定义变量:

> ./python.exe
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in range(4):
...     globals()['var{}'.format(i)] = i
...
>>> var0
0
>>> var1
1
>>> var2
2
>>> var3
3
>>> var4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var4' is not defined
~~

【讨论】:

    【解决方案3】:

    列表和字典用于这个确切的问题

    这里是如何使用列表来解决它

    counter = 0
    a=[]
    while counter < 4:
       a[counter] = ...
    

    但如果你真的需要创建不同的变量名,你可以使用exec

    for i in xrange(0, 4):
        exec("var_%d = %s" % (i + 1, ...));
    

    【讨论】:

      【解决方案4】:

      我认为在这种情况下最好使用字典,否则你的变量不会创建结构,所以它会非常混乱。所以,你可以这样做:

      d = {}
      counter = 0
      while k < 4: 
          key = "var" + str(counter)    # create key
          value = ...       # create value
          d[key] = value       # add to dictionary
          k += 1      # increment by one
      

      【讨论】:

        猜你喜欢
        • 2021-05-01
        • 1970-01-01
        • 2014-11-11
        • 2013-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        相关资源
        最近更新 更多