Реализовать функцию, которая принимает на вход итератор с функциями, и возвращает словарь, в котором ключ — это первое слово из аннотации функции

  • Главная
  • Информатика
  • Python
  • Реализовать функцию, которая принимает на вход итератор с функциями, и возвращает словарь, в котором ключ — это первое слово из аннотации функции
Предмет: Информатика
Раздел: Программирование на языке Python
Задание

Необходимо реализовать функцию, которая принимает на вход итератор с функциями, и возвращает словарь, в котором:

  • Ключ — это первое слово из аннотации функции.
  • Значение — это ссылка на функцию (сама функция).
Разбор задачи:
  1. Итератор функций — это любой объект, по которому можно итерироваться и получать функции. Это может быть список функций, кортеж функций и т.д.
  2. Аннотирование функций — Это возможность указывать типы входных параметров и тип возвращаемого значения функции в виде аннотации. Мы можем получить эти аннотации через специальное поле __annotations__, используя модуль inspect.
  3. Первое слово из аннотации функции — Аннотации обычно имеют типы. Хотя задача не уточняет, что именно нужно извлечь как "первое слово", скорее всего имеется в виду первое слово из строки аннотации к возвращаемому значению, или формат описания типа.
Решение

Мы напишем функцию function_dict, которая принимает на вход итерируемый объект, содержащий функции, и строит словарь, как описано в задаче. Воспользуемся библиотекой inspect для работы с аннотациями.

Код:
import inspect

def get_first_word(annotation):
    """Функция для извлечения первого слова из аннотации."""
    # Преобразуем аннотацию в строку, если она есть
    if isinstance(annotation, str):
        return annotation.split()[0] if annotation else None
    return str(annotation).split()[0] if annotation else None

def function_dict(funcs):
    """Функция принимает итератор функций и возвращает словарь, где ключ - первое слово из аннотации, а значение - сама функция."""
    result = {}
    for func in funcs:
        # Получаем аннотации с помощью inspect
        signature = inspect.signature(func)
        if 'return' in signature.return_annotation:
            annotation = signature.return_annotation
        else:
            continue
        # Получаем первое слово из аннотации
        first_word = get_first_word(annotation)
        # Записываем в словарь
        result[first_word] = func
    return result
Объяснение кода:
  1. get_first_word: Функция для выделения первого слова из аннотации. Она проверяет, есть ли аннотация и преобразует её в строку, а затем разбивает по пробелу и возвращает первое слово.
  2. function_dict: Основная функция, которая принимает итератор функций. Для каждой функции извлекается аннотация возвращаемого значения с помощью inspect.signature(func).return_annotation. Из аннотации извлекается первое слово, оно становится ключом, а сама функция — значением.
Пример использования:
def add(a: int, b: int) -> "Addition of a and b":
    return a + b

def multiply(a: int, b: int) -> "Multiplication of a and b":
    return a * b

functions = [add, multiply]

result = function_dict(functions)
for key, value in result.items():
    print(f"Ключ: {key}, Ссылка на функцию: {value}")
Вывод:
Ключ: "Addition", Ссылка на функцию: 
Ключ: "Multiplication", Ссылка на функцию:

Этот код создает словарь, в котором ключи — это первое слово из аннотации возврата функций, а значения — сами функции.

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн