从python中的方法返回一个值

时间:2018-05-22 18:27:04

标签: python python-3.5

我是从perl转到python,这个问题似乎是不可思议的,因为这些不相关的例子很混乱。

我正在尝试为可变长度的对象列表创建快速查找索引。可以通过名称或编号返回对象。 byname和bynum方法在“return”

处抛出语法错误

我在这里做错了什么?

提前致谢!

class BookSumIndex():

        bookptr = 0
        BookSum = []; # object container
        ByName = {}   # named referent to objects 
        ByNum = {}    # numerical referent to objects

        def addbook(self,thisbook,bookname,booknum):
                self.BookSum.insert(self.bookptr,BookSumObject())
                namepair = {bookname:self.bookptr}
                numpair = {booknum:self.bookptr}
                self.ByName.update(namepair)
                self.ByNum.update(numpair)
                self.bookptr += 1

        def byname(self,bookname):
                bnam = self.ByName.get(bookname)
                if type(bnam) != "NoneType":
                        thisbook = self.BookSum.get[int(bnam)]
                        return thisbook

        def bynum(self,booknum):
                bnum = self.ByNum.booknum
                if type(bnum) != "NoneType":
                        thisbook = self.BookSum[self.ByNum.get[int(bnum)]
                        return thisbook

1 个答案:

答案 0 :(得分:2)

你在bynum方法中缺少本书的右大括号。

thisbook = self.BookSum[self.ByNum.get[int(bnum)]

应该是:

thisbook = self.BookSum[self.ByNum.get[int(bnum)]]

我还建议您使用比较:

bnum is not None

而不是:

type(bnum) == "NoneType"

我不确定为什么会出现语法错误,但由于没有返回值的方法会为变量分配None,因此您可以返回None以查看IDE是否不再标记方法。 E.g:

def bynum(self,booknum):
    bnum = self.ByNum.booknum
    if bnum is not None:
        thisbook = self.BookSum[self.ByNum.get[int(bnum)]
        return thisbook
    else:
        return None

另外,以防万一检查本书的缩进并像上面那样返回。