【问题标题】:How to increment variable names/Is this a bad idea [duplicate]如何增加变量名/这是一个坏主意[重复]
【发布时间】:2011-01-30 02:45:39
【问题描述】:

在 Python 中,如果我让用户输入数字 X,然后程序进入一个用户输入 X 值的 for 循环,有没有办法/让变量名自动递增是个坏主意?

即:

user inputs '6'  
value_1 = ...  
value_2 = ...  
value_3 = ...  
value_4 = ...  
value_5 = ...  
value_6 = ...

我可以让变量名称像这样递增,这样我就可以获得用户输入的变量数量吗?还是应该使用完全不同的方法,例如将所有新值附加到列表中?

【问题讨论】:

  • 改用列表。
  • 或字典,以索引值为键。
  • 好的,我知道使用列表/字典更好。但出于完全的好奇,这些是按照要求的方式来做的吗?
  • 按照你描述的方式做这件事没什么意义。变量名称是为程序员提供的,以便能够引用您知道以某种形式存在的对象。但是,如果您根本不知道某个值存在(例如,用户可能键入 1,因此不会创建“value_2”),那么您如何充分使用它呢?

标签: python variables loops for-loop increment


【解决方案1】:

您应该将所有值附加到一个列表中,这样您就可以在以后轻松地遍历这些值,并且不会在您的命名空间中乱扔无用的变量和魔法。

【讨论】:

    【解决方案2】:

    我应该完全使用 不同的方法,例如全部附加 将新值添加到列表中?

    是的,您可以使用list。您也可以为此使用mapping

    使变量名像这样递增 那个

    没有。这是一个非常糟糕的主意。


    “但是出于完全的好奇,这些是按照要求的方式来做的吗?”

    是的,但这显然是一个非常糟糕的主意。所以,展示它是没有意义的。这是一件可怕的事情,即使尝试也是可怕的。

    【讨论】:

      【解决方案3】:

      虽然在这里使用列表或字典当然是正确的方法,但可以使用 exec() 创建命名变量。您会错过列表和字典提供的所有便捷操作(想想 len()、插入、删除、排序等),但有可能:

      count = raw_input('Number of variables:')
      for i in xrange(count):
          exec('var_' + str(i) + ' = ' + str(i))
      

      exec() 接受并执行包含有效 Python 表达式的字符串。所以上面这段代码是动态生成和执行代码的。

      【讨论】:

      • 我的方法是..,new_var = eval('old_var' + str(count))
      • @ShirjeelAhmedKhan:这不符合 OP 的要求:您不能使用 eval 动态 创建 变量。同样,使用列表或字典是更好的解决方案。 execeval 可能(很容易)由于代码注入而导致安全问题。考虑当count = -1 或更糟的是count = '+ os.rmdir("...")' 时会发生什么。
      【解决方案4】:

      也许这会对你有所帮助。

      filenamee = 'Value_'
      counter1 = 1
      counter2 = 2
      list1 = []
      list2 = range(30)    #random number, given len needed
      for x in list2:
          counter1 = str(counter1)
          full_name = (filenamee+counter1)
          list1.append(full_name)
          counter1 = counter2
          counter2+=1
      
      for x in list1:
          print(x)
      

      如果您希望创建增量变量,这对我有用。我不知道这是否是干净的编程...... :)

      保重

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 2016-12-08
        • 2019-08-15
        • 2011-08-16
        • 1970-01-01
        • 2011-10-10
        • 2020-12-12
        相关资源
        最近更新 更多