Вопрос по синтаксису Python
def big_lists(tag):
return len(tag.contents) > 20 and tag.name == 'ul'
len(soup.find_all(big_lists))
# 13
soup.find_all() выдает все теги страницы.
А каким образом
find_allпередает их всех в качестве аргумента функцииbig_lists?Если предположить что программа выполняется справа налево, о почему
big_listsне кричит
missing 1 argument, 0 given ?
Глупый вопрос,но почему
soup.find_all(big_lists)), а неsoup.find_all(big_lists()))Где-то можно почитать подробнее про такие "вложения"?
Ответы (1 шт):
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)