0

我是 python 新手。我想让这部分变量在函数之间共享。

     publist = []
     publication = {"pubid" : 1, "title" : 2, "year" : 3, "pubtype" : 4, "pubkey" :5}
     article = False
     book = False
     inproceeding = False
     incollection = False
     pubidCounter = 0

我在哪里放置这些变量。我试过如下所示放置它,但它说缩进有错误。但是,将它们放在外面也会返回缩进错误。

import xml.sax


class ABContentHandler(xml.sax.ContentHandler):
     publist = []
     publication = {"pubid" : 1, "title" : 2, "year" : 3, "pubtype" : 4, "pubkey" :5}
     article = False
     book = False
     inproceeding = False
     incollection = False
     pubidCounter = 0

    def __init__(self):
        xml.sax.ContentHandler.__init__(self)

    def startElement(self, name, attrs):

        if name == "incollection":
            incollection = true
            publication["pubkey"] = attrs.getValue("pubkey")
            pubidCounter += 1

        if(name == "title" and incollection):
            publication["pubtype"] = "incollection"



    def endElement(self, name):
        if name == "incollection":

            publication["pubid"] = pubidCounter
            publist.add(publication)
            incollection = False

    #def characters(self, content):


def main(sourceFileName):
    source = open(sourceFileName)
    xml.sax.parse(source, ABContentHandler())


if __name__ == "__main__":
    main("dblp.xml")
4

2 回答 2

2

像这样放置它们时,您将它们定义为类的本地,因此您需要通过检索它们self

例如

def startElement(self, name, attrs):

    if name == "incollection":
        self.incollection = true
        self.publication["pubkey"] = attrs.getValue("pubkey")
        self.pubidCounter += 1

    if(name == "title" and incollection):
        self.publication["pubtype"] = "incollection"

如果您希望它们是全局的,您应该在类之外定义它们

于 2013-10-12T02:38:20.433 回答
1

在类定义中放置变量时,可以这样引用这些变量:(self.incollectionself 是类实例)。如果您不这样做(仅通过名称引用这些变量,例如incollection),Python 将尝试在全局范围内查找这些变量。因此,您可以将它们定义为全局并在引用这些变量之前使用 global 关键字:

global incollection
incollection = true
于 2013-10-12T02:59:56.197 回答