python/scons帮助:维护源文件+对象文件的列表

2024-09-26 22:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python几乎一无所知,我使用的是scons。(如果您正在阅读本文,并且了解Python而不了解scons,那么您可能可以帮助我!)在

有人能帮我解释一下,我怎么会有一个包含两个列表的变量?我不太清楚语法。这对吗?在

buildinfo = // how do you initialize a variable that has fields?
buildinfo.objectFiles = []; // list of the object files
buildinfo.sourceFiles = []; // list of the source files

如果我有一个函数f()返回这个结构的变量,那么把f()的返回值追加到两个列表中的最短方法是什么?(实际上f()是Sconscript(),但没关系。)

^{pr2}$

有较短的路吗?这不是太长,但它足够长,容易出错。在

编辑:或者更好的是,我想定义一个简单的类,它有两个字段,objectFiles和sourceFiles,如果我调用

object1.append(object2)

然后object1会将object2的objectFiles和sourceFiles字段附加到它自己的字段中,所以我只需执行以下操作:

buildinfo = BuildInfo([],[]);
buildinfo.append(f(...));
buildinfo.append(f(...));
buildinfo.append(f(...));

Tags: ofthe列表语法filesdosconslist
3条回答

您可以使用dict使代码与原始代码非常相似,但不会使用点。看看:

buildinfo = dict()
buildinfo['objectFiles'] = []
buildinfo['sourceFiles'] = []
buildinfo['objectFiles'].append("Foo")
buildinfo['sourceFiles'].append("Bar")

会有用的,但我不确定这是不是你要找的。在

关于更新的问题: 您可以轻松地组合两个列表,而无需另一个对象。在

^{pr2}$

这样的怎么样:

class BuildInfo(object):
    def __init__(self, objectFiles = [], sourceFiles = []):
        self.objectFiles = objectFiles
        self.sourceFiles = sourceFiles 
    def append(self, build_info):
        self.objectFiles.extend(build_info.objectFiles)
        self.sourceFiles.extend(build_info.sourceFiles)

要使用它,你会说:

^{pr2}$

append和extend之间的区别是

a = [1,2,3]
b = [4,5,6]
a.append(b) #a is now [1,2,3[4,5,6]]

a = [1,2,3]
b = [4,5,6]
a.extend(b) #a is now [1,2,3,4,5,6]

如果你创建了一个单独的类(例如Oren的BuildInfo),那么你当然可以向这个类添加一个方法,在两个列表中追加数据。在

class BuildInfo(object):
    def append(self, data):
        self.objectFiles.append(data)
        self.sourceFiles.append(data)

相关问题 更多 >

    热门问题