【问题标题】:Creating multiple variables [duplicate]创建多个变量[重复]
【发布时间】:2016-12-18 01:45:50
【问题描述】:

我想用 Python 中的一个 for 创建 10 个变量(不是数组)。 像这样的:

for i in range(1,10,1)
    variable i = 100 / i
    print variable i

我想创建变量名,在这种情况下: variable1, variable2, variable3,..., variable10 我不想要数组

我有一张坐标图 (640 x 480)。我正在识别像素颜色为白色的坐标。地上有3个球,我想得到每个球的中心坐标,所以如果被评估的坐标离最后一个很近,x和y坐标将被平均,如果坐标属于a将评估坐标属于新坐标组的新球。

p=0
h=0
for j in range(1,480,1):
   for i in range(1,640,1):
      c=cv.Get2D(image,j,i)
      if c[0] == 255:
        old_coord X  = new_coord x
        new_coord x += [(i,j)]
        if (old_coord x - 5 < new_coord x < old_coord x + 5)
            averx x = averx x + i
            avery x = averx x + j
            count x = count x + 1
        else
            p = p + 1
            new_coord x += [(i,j)]
average(averx1 , count 1)
average(avery1 , count 1)
average(averx2 , count 2)
average(avery2 , count 2)

【问题讨论】:

  • 不,你不想那样做。告诉我们原因,我们会告诉你你真正想要做什么。
  • 这是一个常见问题,它永远不是正确的选择。为什么不想使用数组(在 Python 中通常称为列表)?
  • @Marcin:我想你心里有这样的语言?
  • 如果事先知道变量的名称,为什么还要动态创建呢?之后您还必须通过它们的实际名称来引用它们。
  • 顺便提一下,关于这个主题的一篇不错的博文是Keep data out of your variable names

标签: python variables for-loop


【解决方案1】:

永远不要创建带编号的变量名称(可能是 1 或 2,但绝不是 9。)而是使用列表或字典:

x = dict()
for i in range(1,10,1)
    x[i] = 100 / i
    print x[i] 

(在这种情况下我使用了 dict,因为 i 从 1 开始。)但是,根据您希望进一步使用 x 的方式,您可能希望使用列表来代替。


也许我应该尝试说服您使用名为variable1variable2 等的变量是一个坏主意。由于这些变量是编号的,它们之间可能有一些密切的关系。也许它们都是数字。假设您想将它们全部加一。您必须编写重复的代码,例如

variable1 += 1
variable2 += 1
variable3 += 1
... etc

而不是

for i in range(1,10,1):
    x[i] += 1

或者您可能想将所有这些变量输入到一个函数中。你必须写

func(variable1, variable2, variable3, ...)

而不是

func(**x)

结论:有编号的变量名称是一种痛苦! 使用字典或列表来避免痛苦。

【讨论】:

  • 我的回答是 CW,你/我可以复制你对为什么这是一个坏主意的解释吗?
【解决方案2】:

你不应该这样做,但你可以如果你真的想要

for j in range(1,10,1):
    exec('var_%d = j'%j)

我能否再次强调一下你不应该这样做,但我认为没有理由隐藏你上吊的能力。

鉴于您正在尝试做的事情,我会关注morphological operations。对于您正在尝试做的事情,有更好的算法。 (看起来你想做的已经在scipyexamples)。


引用 unutbu:

也许我应该尝试说服您使用名为variable1variable2 等的变量是个坏主意。由于这些变量是编号的,它们之间可能有一些密切的关系。也许它们都是数字。假设您想将它们全部加一。您必须编写重复的代码,例如

variable1 += 1
variable2 += 1
variable3 += 1
... etc

而不是

for i in range(1,10,1):
    x[i] += 1

或者您可能想将所有这些变量输入一个函数。你必须写

func(variable1, variable2, variable3, ...)

而不是

func(**x)

结论:有编号的变量名称是一种痛苦! 使用字典或列表来避免痛苦。

【讨论】:

  • 为什么不推荐呢?这就是我要找的,谢谢
  • 出于已经给出的所有原因(请参阅 uubuntu 的回答)。这是不好的风格。它使您的代码难以阅读/维护。您最终可能会使用相同的技巧来操作大量变量,虽然它可以工作,但在 python 中有更好/更快/更具可读性的方法。
  • Andrea:这不是个好主意。至少,使用字典,比如d = {},然后是d["var_%d" % j] = j。您对代码所做的其他事情是将您的本地命名空间用作字典。 (请注意,从技术上讲,它一本字典,它只是与所有正常变量共享的字典!)
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2019-06-10
  • 2020-09-13
  • 2016-02-29
  • 2020-03-25
  • 2018-07-31
  • 1970-01-01
相关资源
最近更新 更多