Нужно объяснение лямбда-функции очистки веб-страниц в Python

Я занимаюсь парсингом веб-страниц на Python и нашел это:

products = soup.find_all('li')
products_list = []
for product in products:
    name = product.h2.string
    price = product.find('p', string=lambda s: 'Price' in s).string
    products_list.append((name, price))

Я хотел бы понять лямбда-функцию в этом случае, большое спасибо.

Для каждого элемента-потомка p текстовое содержимое будет передано в лямбда-функцию; если текст содержит строку «Цена», элемент будет возвращен (т. е. выигрывает первое совпадение).

ekhumoro 31.08.2024 15:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы создаете лямбда-функцию (анонимную), которая принимает s в качестве аргумента, а затем проверяет, находится ли строка «Цена» в s, или вы можете сказать, содержит ли s строку «Цена». В зависимости от этого он вернет True или False.

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

Вот пример (если это поможет):


>>> # Create lambda function and store inside `string`
>>> string = lambda s: "Price" in s
>>> # Check `string` indeed a lambda function
>>> string
<function <lambda> at 0x7f4c0afa1630>
>>>
>>> # Call the lambda function with an argument
>>> # Inside lambda function, now, `s = "Hello, World"` !
>>> # It will check this: `"Price" in s`, it's not:
>>> string("Hello, World")
False
>>> # Now, `s = "What is the price of milk?"`
>>> # "Price" and "price" are not same !
>>> string("What is the price of milk?")
False
>>> string("Price of milk is $69.")
True

Эта лямбда-функция аналогична этой:

def string(s):
    return "Price" in s

Спасибо, теперь я понимаю лучше! Знаете ли вы, почему в «products_list.append((имя, цена))» две пары круглых скобок?

Rayan CH TFG 31.08.2024 15:56

Пожалуйста! Итак, обратите внимание, что для двух круглых скобок вы определили список: products_list = [] и позже вы добавляете (т. е. добавляете) к нему, но вы добавляете кортеж, а не отдельный элемент. Если разобрать это утверждение на части, может стать ясно: products_list = []product = ( "milk", 10)products_list.append(product) . Короче говоря, одна скобка предназначена для самого метода append, а другая для кортежа (т. е.: (name, price)).

Cheap Nightbot 31.08.2024 16:09

извините, форматирование кода сбивает с толку, но надеюсь, что это поможет. (вы можете скопировать и вставить код в ide и отформатировать его, чтобы понять, не кажется ли это запутанным 😅)

Cheap Nightbot 31.08.2024 16:11

Другие вопросы по теме