Вызов функции без аргументов, с которой она была определена - PullRequest
0 голосов
/ 02 февраля 2020

Я работаю над некоторыми примерами BeautifulSoup4 на Python и не могу понять синтаксис следующего примера:

url = "https://en.wikipedia.org/wiki/World_War_II"
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')

def list_with_links(tag):   # takes a tag object
    return tag.name == 'li' and len(tag.find_all('a'))>7  

list_with_a = soup.find_all(list_with_links)

Мой вопрос - Как вы можете позвонить функция list_with_links без переданного аргумента и как возвращает ли она то, что возвращает (список результатов тегов, которые соответствуют условиям внутри функции)?

1 Ответ

1 голос
/ 02 февраля 2020

Когда вы передаете только имя функции (без скобок и аргументов), вы просто передаете указатель на эту функцию, но не выполняете ее. Затем вы можете вызвать этот указатель (с круглыми скобками и аргументами) и будет выполняться нормально. Смотрите пример:

def select(f):
    all_data = [11, 22, 33, 44, 55, 66]
    res_data = []
    for data in all_data:
        if f(data):
            res_data.append(data)
    return res_data

def filter(value):
        return True if value%2 == 0 else False

print(select(filter))  # [22, 44, 66]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...