Python中的Shell样式列表生成或变量表达式?

时间:2011-05-28 04:53:18

标签: python variables

----完成改述----

我正在开发一个新类,其中每个实例基本上是顺序和链接的。我曾经以一种非常shell的方式思考,如果系统地命名它,我可以定义一个函数来编译所有这些实例的列表。然后我可以在第一时间做我想做的事情,它以某种方式浏览序列。

但我发现这是一种糟糕的做法。据我所知,我应该改为:

  • 在类中包含嵌入式引用,从而创建递归数据结构。
  • 创建所有实例的列表,这些实例可能会在 init 类中更新,也可能在创建新实例时更新。
  • 首先忘记定义一个新类并使用其他对象列表。

我希望我能做到这一点。再次感谢您的建议。

-----原创但经过编辑的广义问题-----

您好,

我对Python比较陌生,我发现自己总是希望生成某种现有对象的列表。假设我有三个名为x#的变量,其中#是1到3之间的数字。我觉得写的代码类似于:

n=1
List_Of_X=[]
while n < 4:
  List_Of_X.append("x%s" % (n))
  n += 1

但当然我最终会得到一个字符串而不是变量列表。那么,有没有办法“表达”与字符串对应的变量?或者更好的是,首先创建一个变量列表?

编辑:关键是没有手动指定列表 - 我想以某种方式自动化它。从下面的答案中可以看出,我可以使用上面公认的crummy方法生成字符串列表,然后使用eval()函数来表达它们。或者,使用一种稍微复杂的方法来生成对象列表。

我觉得任何一种解决方案可能都不是最好的做法,但我感谢所有的帮助!感谢。

6 个答案:

答案 0 :(得分:1)

这样的事情:

list_of_x = [x1, x2, x3]

答案 1 :(得分:1)

如果你有这样的代码:

x1 = "foo"
x2 = "bar"
x3 = "goat"

然后你应该用:

替换它
x = ["foo", "bar", "goat"]

你可以这样做:

x = [x1, x2, x3]

但是这会将x1,x2,x3中的值复制到x中。对x所做的更改不会更改x1,x2,x3。

如果此策略不适合您,您需要向我们展示更多您正在做的事情,以便我们为您提供帮助。

答案 2 :(得分:0)

您可以使用vars()locals()globals()创建新变量,但需要这样做非常不寻常:

for n in range(1, 4):
    vars()['x%s' % n] = n

>>> x1, x2, x3
<<< (1, 2, 3)

答案 3 :(得分:0)

好的,所以神秘的一部分似乎是捕捉你的变量x1,x2,......当它们出现时。如果你设法做到这一点,应该很容易在列表中收集它们,对吧?!因此,您必须寻找实际为其分配值的地方x1 = ...x2 = ... ......

也许您正在从文件或用户输入中读取这些值?! - 让我们详细说明Eevee在评论中提到的一个案例,其中x1,x2,......实际上是用户定义类的实例。然后,不是在分配一个xN后手动将其附加到列表中,您可以让课程为您进行录制:

class C(object):
    instances = []
    def __init__(self):
        C.instances.append(self)

x1=C()
x2=C()
x3=C()

C.instances # <= [<__main__.C object at 0x01293230>, ...]

所以你在一个不错的列表中捕获了x1,x2,...的。这有帮助吗?

答案 4 :(得分:-2)

我认为您首先需要了解Python中没有变量。只有对象的引用。所以即使考虑“创造变量”也是错误的。它们不存在。

答案 5 :(得分:-3)

您可以使用eval(var)

将变量转换为其值

例如,在您的情况下,您可以这样做:

map(eval,List_Of_X)

如果你想将你的字符串列表['x1','x2',...]转换成它们的值,比如说[1,2,...]如果x1 = 1且x2 = 2