Как передать дополнительный параметр в map python
Всем привет! Подскажи, есть ли возможность в python передать параметр в map
with Pool(10) as p:
try: info = p.map(get_info_hubr, links)
except: info = []
def get_info_hubr(link:str)->dict:
"""
Получаем данные со статьи
"""
hubr_parser = HubrParser(link)
name_article = hubr_parser.get_name()
author = hubr_parser.get_authors()
links = hubr_parser.get_links()
date = hubr_parser.get_date()
subjects = hubr_parser.get_subjects()
return create_dict(name_article, date, author, link, links, subjects)
Идея такова: хочу передавать парсер (объект парсера) в качестве параметра в метод get_info_hubr для того что бы метод был не зависим от конкретной реализации парсера. В данном случае реализация для ресурса Hubr, но так же есть реализации под другие ресурсы
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Возможно поможет использование lambda
def get_info_hubr(hubr_parser: HubrParser, link:str)->dict:
pass # Оставляем почти без изменений
#------------------
parser_object = HubrParser()
with Pool(10) as p:
try: info = p.map(lambda link: get_info_hubr(parser_object, link), links)
except: info = []
Кроме того, можно использовать functools.partial, в сущности это та же lambda, но немного быстрее, если верить ответу, а также во многих случаях, код становится более читаемый.
Например
def get_info_hubr(hubr_parser: HubrParser, link:str)->dict:
pass # Оставляем почти без изменений
#-----------
from functools import partial
with Pool(10) as p:
try: info = p.map(partial(get_info_hubr, hubr_parser=HubrParser()), links)
except: info = []