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

问题描述

| ----完全改写---- 我正在研究一个新的类,其中的每个实例本质上都是顺序的和链接的。我曾想过,如果我系统地命名它们,可以以一种非常精巧的脚本方式定义一个函数,以编译所有这些实例的列表。然后,我可以做我想做的第一件事,即以某种方式浏览序列。 但是我看到这是一个可怕的方法。据我了解,我应该执行以下操作之一: 在类中包括嵌入式引用,从而创建递归数据结构。 创建所有实例的列表,该列表可能在类init或创建新实例时更新。 首先不要定义一个新类,而要使用其他对象列表。 我希望我已经明白了。再次感谢你提供的建议。 -----原始但已编辑的广义问题----- 你好, 我是Python的新手,我发现自己一直想生成某种类型的现有对象的列表。假设我有三个名为x#的变量,其中#是1到3之间的数字。我很想写这样的代码,就像这样:
n=1
List_Of_X=[]
while n < 4:
  List_Of_X.append(\"x%s\" % (n))
  n += 1
但是,然后我当然得到了一个字符串列表,而不是变量列表。那么,有没有办法“表达”与字符串相对应的变量?还是更好,首先创建一个变量列表? 编辑:症结不是手动指定列表-我想以某种方式使其自动化。从下面的答案看来,我可以使用上面公认的疯狂方法来生成字符串列表,然后使用eval()函数来表达它们。或者,首先使用某种复杂的方法生成对象列表。 我感到这两种解决方案都不是最佳实践,但我感谢所有帮助!谢谢。     

解决方法

        我认为您首先需要了解Python中没有变量。只有对象的引用。因此,甚至考虑“创建变量”都是错误的。它们不存在。     ,        像这样:
list_of_x = [x1,x2,x3]
    ,        如果您有这样的代码:
x1 = \"foo\"
x2 = \"bar\"
x3 = \"goat\"
那么您应该将其替换为:
x = [\"foo\",\"bar\",\"goat\"]
您可以这样做:
x = [x1,x3]
但这会将x1,x2,x3中的值复制到x中。对x所做的更改不会更改x1,x2,x3。 如果该策略对您不起作用,则需要向我们展示您正在做的事情,以便我们为您提供帮助。     ,        您可以使用
vars()
locals()
globals()
创建新变量,尽管这样做很不常见:
for n in range(1,4):
    vars()[\'x%s\' % n] = n

>>> x1,x3
<<< (1,2,3)
    ,        好的,所以当它们出现时,神秘的一部分似乎正在捕获变量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,...的值。有帮助吗?     ,        您可以使用eval(var)将变量转换为其值 例如,您可以执行以下操作:
map(eval,List_Of_X)
如果要将字符串[\'x1 \',\'x2 \',...]的列表转换为它们的值,如果x1 = 1和x2 = 2,则说[1,2,...]     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...