Вопрос по синтаксису Python

def big_lists(tag):
    return len(tag.contents) > 20 and tag.name == 'ul'
len(soup.find_all(big_lists))
# 13

soup.find_all() выдает все теги страницы.

  1. А каким образом find_all передает их всех в качестве аргумента функции big_lists?

  2. Если предположить что программа выполняется справа налево, о почему big_lists не кричит

missing 1 argument, 0 given ?

  1. Глупый вопрос,но почему soup.find_all(big_lists)), а не soup.find_all(big_lists()))

  2. Где-то можно почитать подробнее про такие "вложения"?


Ответы (1 шт):

Автор решения: extrn

find_all - функция высшего порядка. Она принимает функцию в качестве аргумента и вызывает ее столько раз, сколько потребуется, каждый раз передавая ей один аргумент.

почему big_lists не кричит missing 1 argument, 0 given?

потому, что ее никто не вызывает без аргументов

почему soup.find_all(big_lists)), а не soup.find_all(big_lists()))

потому, что тогда big_lists была бы вызвана не в том месте и не с теми параметрами

пример простой функции высшего порядка

def higher_order(f):
    for x in range(3):
        print(f(x))
>>> higher_order(float)
0.0
1.0
2.0
>>> higher_order(hex)
0x0
0x1
0x2
>>> higher_order(lambda x: x * 5)
0
5
10
>>> higher_order(range)
range(0, 0)
range(0, 1)
range(0, 2)
→ Ссылка