Python:跨函数共享变量



我是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")

当这样放置它们时,您将它们定义为类的本地,因此您需要通过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"

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

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

global incollection
incollection = true

最新更新