如何使用“for”循环创建变量名? [复制]

Posted

技术标签:

【中文标题】如何使用“for”循环创建变量名? [复制]【英文标题】:How to create variable names with a "for" loop? [duplicate] 【发布时间】:2019-04-29 19:15:52 【问题描述】:

我知道我的标题可能有点令人困惑,但我无法描述我的问题。基本上,我需要创建一堆都等于0 的变量,并且我想使用for 循环来执行此操作,因此我不必对其进行硬编码。

问题是每个变量都需要有不同的名称,当我从for 循环中调用数字来创建变量时,它无法识别出我想要来自for 循环的数字。这是一些更有意义的代码:

total_squares = 8
box_list = []
for q in range(total_squares):
  box_q = 0
  box_list.append(box_q)

我需要它来创建box_1 并将其添加到列表中,然后创建box_2 并将其添加到列表中。只是它认为我在调用变量box_q,而不是调用for 循环中的数字。

【问题讨论】:

为什么不使用列表而不是可变数量的变量?您可以有一个列表列表,例如box_list[box[3]] 您必须为此操作globals() 字典(它不适用于函数局部变量)。无论如何,正如@Selcuk 已经说过的那样,直接使用列表或字典会更好。 见Why you don't want to dynamically create variables和相关的Keep data out of your variable names。 【参考方案1】:

您可以使用字典。我认为这种方法更好,因为您可以看到键值对。

代码

total_squares=8
box_list=
for q in range(total_squares):
    box_list['box_'+str(q)]=0

print(box_list)

输出

'box_0': 0, 'box_1': 0, 'box_2': 0, 'box_3': 0, 'box_4': 0, 'box_5': 0, 'box_6': 0, 'box_7': 0

【讨论】:

为什么这个答案被否决了?【参考方案2】:

动态创建变量是anti-pattern,应该避免。你需要的其实是一个list

total_squares = 8
box_list = []
boxes = [0] * total_squares
for q in range(total_squares):
  box_list.append(boxes[q])

然后您可以使用以下语法引用您想要的任何元素(例如,box_i):

my_box = box_list[boxes[i]]

【讨论】:

啊,我明白了。非常感谢您花时间为我解释更多!【参考方案3】:

您似乎正在尝试使用q 的值来编辑box_q 中的“q”,但qbox_q 是两个完全不同的变量。

您可以动态地操作变量名,但在 Python 中很少这样做。很好的解释:https://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html

相反,您可以使用列表并使用列表索引访问项目,例如

total_squares = 8
box_list = []
for q in range(total_squares):
    box_list.append(0)

您可以使用box_list[0]box_list[1] 等访问每个项目。您还可以更简洁地创建您的盒子:

boxes = [0] * total_squares

如果你想让你的盒子包含一些东西,并且有这个命名结构,那么你可以使用字典:

boxes_dict = 'box_'.format(q): 0 for q in range(total_squares)

这将创建一个包含 total_squares 键值对的字典。您可以使用boxes_dict['box_0']boxes_dict['box_1'] 等访问每个盒子。您甚至可以更改 0 的值以在盒子中放入一些东西,例如

boxes_dict['box_2'] = "Don't use dynamic variable naming"
boxes_dict['box_3'] = 'And number your boxes 0, 1, 2 ... etc'

【讨论】:

以上是关于如何使用“for”循环创建变量名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

错误:尝试在For循环中使用零长度变量名

如何在循环中更改php变量名?

如何用变量名添加数字? [复制]

oracle存储过程中循环for in是如何使用的

如何在运行时更改变量名

js如何动态循环给数组名加入变量值?