从函数外返回列表集:python

从函数外返回列表集:python,python,list,append,return-value,xlrd,Python,List,Append,Return Value,Xlrd,方法collectInfoFromXLS()从给定的XLS文件中提取引号(“”)下的所有内容,并放入列表中 class ExtractInfo(object): def collectInfoFromXLS(): workbookPath = config.get('TestCaseFileURL','XLSpath') workbook = xlrd.open_workbook(workbookPath) SheetPath = con

方法
collectInfoFromXLS()
从给定的XLS文件中提取
引号(“”)
下的所有内容,并放入
列表中

class ExtractInfo(object):

    def collectInfoFromXLS():
        workbookPath = config.get('TestCaseFileURL','XLSpath')
        workbook = xlrd.open_workbook(workbookPath)
        SheetPath = config.get('TesCaseSheetName','Sheet1')
        worksheet = workbook.sheet_by_name(SheetPath)
        numOfRows = worksheet.nrows - 1
        curr_row = 0
        row1 = []
        row2 = []
        while curr_row < numOfRows:
           curr_row += 1
           row2 = []
           row = worksheet.row(curr_row)
           for value2 in re.findall(r"'(.*?)'", str(row)):
                row2.append(value2)
           return row2
我想从类外调用这个方法,比如

Classobject = ExtractInfo(object)
print Classobject.collectInfoFromXLS()
这样我就可以得到每一行,就像
print
inside方法一样,
我不想将
rows2
追加到另一个列表中,因为这会在检索时产生问题。

Python方法一次只能返回一个结果

一个结果可以是列表的列表;只需返回一个较大的列表,并循环返回结果:

result = []
row2 = []
while curr_row < numOfRows:
   curr_row += 1
   row2 = []
   row = worksheet.row(curr_row)
   for value2 in re.findall(r"'(.*?)'", str(row)):
        row2.append(value2)
   result.append(row2)
return result
一种更先进的技术是将您的方法转换为生成器函数,并逐个生成行。你仍然会重复这个方法。要使函数成为生成器,请使用
yield
表达式;一旦将值设置为生成器,就不能再使用
return

def collectInfoFromXLS():
    workbookPath = config.get('TestCaseFileURL','XLSpath')
    workbook = xlrd.open_workbook(workbookPath)
    SheetPath = config.get('TesCaseSheetName','Sheet1')
    worksheet = workbook.sheet_by_name(SheetPath)
    numOfRows = worksheet.nrows - 1
    curr_row = 0
    row2 = []
    while curr_row < numOfRows:
       curr_row += 1
       row2 = []
       row = worksheet.row(curr_row)
       for value2 in re.findall(r"'(.*?)'", str(row)):
            row2.append(value2)
       yield row2

现在才
Classobject.collectInfoFromXLS()
返回一个生成器对象而不是列表,并且您只能在该对象上循环一次。

您的问题是什么?@DanielRoseman:他想神奇地返回列表序列而不创建序列。确切地说是@MartijnPieters
for row in Classobject.collectInfoFromXLS():
    print row
def collectInfoFromXLS():
    workbookPath = config.get('TestCaseFileURL','XLSpath')
    workbook = xlrd.open_workbook(workbookPath)
    SheetPath = config.get('TesCaseSheetName','Sheet1')
    worksheet = workbook.sheet_by_name(SheetPath)
    numOfRows = worksheet.nrows - 1
    curr_row = 0
    row2 = []
    while curr_row < numOfRows:
       curr_row += 1
       row2 = []
       row = worksheet.row(curr_row)
       for value2 in re.findall(r"'(.*?)'", str(row)):
            row2.append(value2)
       yield row2
for row in Classobject.collectInfoFromXLS():
    print row