Помогите написать декоратор

Irina_kalista

Новичок
Пользователь
Ноя 24, 2023
15
0
1
Текст задания:

Дана функция get_kinetic_energy, которая вычисляет кинетическую энергию. В ней ничего изменять не нужно!
Напишите декоратор memorize, который организует механизм кэширования данной функции.
Декоратор должен сохранять информацию о вызове функции в словарь, в котором ключ - это аргументы, с которыми была вызвана функция, а значение - это результат выполнения функции.
Если функция с такими аргументами вызывается впервые, то в словарь добавляется информация об этом вызове.
Если функция с такими аргументами уже вызывалась, то новое значение в словарь не добавляется.

То что смогла написать, но декоратор явно написан неполностью, помогите дописать программу.

Python:
def memorize(function):
    # todo Здесь нужно написать код
    pass

[COLOR=rgb(209, 72, 65)]cache = {}

def cache_args(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)
        return cache[args]
    return wrapper[/COLOR]

# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return (weight * speed ** 2)/2
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
374
108
43
Python:
cache = {}


def memorize(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)

    return wrapper


# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return weight * speed ** 2 / 2
    # и все-таки я вынужден тут изменить, потому что по правилам pep нужно ставить пробелы
    # между выражениями/операндами. И скобки в данном случае не обязательны
    # И вообще нехрен указывать что надо менять, а что нет, если пришел/ла сюда за помощью! 🤬🤬🤬
    # Ты тут не всезнайка, раз по форумам лазишь
 
  • Мне нравится
Реакции: regnor

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
# И вообще нехрен указывать что надо менять, а что нет, если пришел/ла сюда за помощью! 🤬🤬🤬
# Ты тут не всезнайка, раз по форумам лазишь
Вот так и живем, просят помочь с одним, тебе помогут, но заявят что сам дурак, и еще изменят то, что попросил не менять. После этого как то пропадает желание просить помощи
 

Irina_kalista

Новичок
Пользователь
Ноя 24, 2023
15
0
1
Python:
cache = {}


def memorize(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)

    return wrapper


# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return weight * speed ** 2 / 2
    # и все-таки я вынужден тут изменить, потому что по правилам pep нужно ставить пробелы
    # между выражениями/операндами. И скобки в данном случае не обязательны
    # И вообще нехрен указывать что надо менять, а что нет, если пришел/ла сюда за помощью! 🤬🤬🤬
    # Ты тут не всезнайка, раз по форумам лазишь
Не работает, в чем проблема? а по поводу что не надо менять это не я указывала, а изначально так в задаче дано было1703237214422.png
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Python:
cache = {}


def memorize(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)
        return cache[args]
    return wrapper


# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return (weight * speed**2) / 2
 

Irina_kalista

Новичок
Пользователь
Ноя 24, 2023
15
0
1
Python:
cache = {}


def memorize(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)
        return cache[args]
    return wrapper


# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return (weight * speed**2) / 2
Все равно неверное значение функции(1703250218708.png
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Почему то в ответе ожидается значение и результата, и всех сохраненных хешей, это странно конечно, но вроде так тогда:

Python:
cache = {}


def memorize(func):
    def wrapper(*args, **kwargs):
        if args not in cache:
            cache[args] = func(*args, **kwargs)
        return cache[args], cache
    return wrapper


# todo Здесь ничего изменять не нужно!
@memorize
def get_kinetic_energy(weight, speed):
    """Кинетическая энергия
    aram weight: масса
    aram speed: скорость
    :return: кинетическую энергию
    """
    return (weight * speed**2) / 2

get_kinetic_energy(5,2)
 
  • Мне нравится
Реакции: Irina_kalista

Форум IT Специалистов