如何递增变量名/这是一个糟糕的想法吗?

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

例如:

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

我能否像那样让变量名递增,以便我可以拥有用户输入的变量数量?或者我应该使用完全不同的方法,例如将所有新值附加到列表上?


9
使用列表代替。 - Alexander Gessler
3
或者按索引值键入的字典。 - S.Lott
1
好的,我理解使用列表/字典更好。但是出于完全好奇,是否有一种在所要求的方式下完成它的方法? - tom
按照您描述的方式做这件事情几乎没有意义。变量名是为了让您作为程序员能够引用某种形式存在的对象。但是,如果您根本不知道某个值是否存在(例如,用户可能会输入1,因此不会创建“value_2”),那么您如何充分利用它呢? - Kylotan
4个回答

18

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


12

虽然使用列表或字典当然是正确的方法,但也可以使用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)) - Shirjeel Ahmed Khan
@ShirjeelAhmedKhan:这并不是OP所询问的内容:你不能使用eval动态地创建变量。再次强调,使用列表或字典是更好的解决方案。execeval可能会因为代码注入而导致安全问题。考虑一下当count=-1时会发生什么,或者更糟糕的是,count='+ os.rmdir("...")' - Pieter Witvoet

9

我应该使用完全不同的方法,比如将所有新值附加到列表中吗?

是的,您可以使用列表。您也可以使用映射来实现。

让变量名像那样递增

不行。那是一个可怕的坏主意。


"但只是出于好奇,有没有一种按照要求的方式做到这一点呢?"

是的,但这显然是一个可怕的坏主意。所以,展示它是毫无意义的。甚至尝试这样做都是一件可怕的事情。


0

或许这会对你有所帮助。

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)

如果您想创建一个增量变量,这对我很有效。我不知道这是否是干净的编程... :)
请注意

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接