Python возврат рекурсии отличается - PullRequest
1 голос
/ 15 апреля 2020

Результат возврата python отличается, и я не понимаю, почему:

from bs4 import BeautifulSoup


def recurse_table(table, table_list):
    if table.find_next("table") is not None:
        recurse_table(table.find_next("table"), table_list)
    table_list.append(table)
    return table_list


fp = open("tc4400_cs_2.html")
soup = BeautifulSoup(fp.read(), features="html.parser")
print(len(recurse_table(soup.find("table"), [])))

возвращает правильную длину (4).

Принимая во внимание

from bs4 import BeautifulSoup


def recurse_table(table, table_list):
    if table.find_next("table") is not None:
        recurse_table(table.find_next("table"), table_list)
    return table_list.append(table)


fp = open("tc4400_cs_2.html")
soup = BeautifulSoup(fp.read(), features="html.parser")
print(len(recurse_table(soup.find("table"), [])))

возвращает TypeError: объект типа 'NoneType' не имеет len ()

Чего мне не хватает?

1 Ответ

1 голос
/ 15 апреля 2020

Возврат отличается, потому что то, что вы возвращаете, отличается. Метод .append() изменяет table_list, но не возвращает его, а возвращает None. Если вы хотите вернуть список, то вы должны добавить table к списку в одну строку, а затем в следующей вернуть список, как вы уже сделали в первом коде.

...