Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче [RSS Feed]

#1 Авг. 2, 2021 22:39:56

Silos
Зарегистрирован: 2021-08-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

Создать декоратор для функции, которая принимает неограниченное количество позиционных ХЕШИРУЕМЫХ элементов.

Декоратор добавляет следующий функционал:

Если функция уже вызвалась с такими аргументами - ваша функция должна вернуть результат выполнения этой функции из памяти, а не вычислять его заного.
Если не вызывалась - вычислить результат, положить его в память, и вернуть.

Офлайн

#2 Авг. 3, 2021 00:02:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

1. Сначала сделай декоратор для простой какой-то функции.
2. Потом этот декоратор для простой какой-то функции переделай в декоратор для функции с аргументами.
3. Потом этот декоратор для функции с аргументами переделай в декоратор для функции с неограниченным количеством аргументов.
4. Потом этот декоратор для функции с неограниченным количеством аргументов переделай в декоратор для функции с неограниченным количеством позиционных аргументов.
5. Потом этот декоратор для функции с неограниченным количеством позиционных аргументов переделай в декоратор для функции с неограниченным количеством позиционных хешируемых аргументов.
6. Потом этот декоратор для функции с неограниченным количеством позиционных хешируемых аргументов переделай в декоратор для функции с неограниченным количеством позиционных хешируемых аргументов и с памятью.

Комментарии:
1. 3-й и 4-й пункты сливаются в один.
2. В 5-м пункте используется функция hash(), чтобы определить хешируемость переданного аргумента.
3. В 6-м пункте для памяти используется словарь dict() внутри декоратора ещё до вызова декорируемой функции.

Смысл в том, чтобы разрабатывать программу итеративно - как бы послойно. Это общий принцип разработки, которого нужно придерживаться. Тогда программы будут получаться сами собой и в них не будет каких-то тёмных углов или перекосов.


tags: development iterative



Отредактировано py.user.next (Авг. 3, 2021 00:09:32)

Офлайн

#3 Авг. 8, 2021 08:47:10

Silos
Зарегистрирован: 2021-08-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

 import collections.abc
cache = {}
def dec(func):
	def wrapper(*args):
		if not cache.get(args):
			a = func(*args)
			cache[args] = a
			return a
		else:
			return cache[args]
	return wrapper
def check_hash(*args):
	if not all(isinstance(i, collections.abc.Hashable) for i in args):
		check = False
	else:
		check = args
	return check
@dec
def fu(*args):
	result = args * 2
	return result
fu(4)

Офлайн

#4 Авг. 8, 2021 09:39:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

Silos???
Будь я преподаватель то не принял бы ваш код.
У вас половина кода не используется. Считай она просто мусор.
Вы не понимаете назначение функции get. Она нужна для для задания значений по умолчанию.
Если для каких-то аргументов функция вернет None,0,tuple(),…. То хеширования не произойдет. Это прямое нарушение требований задания. Следовательно ваш код неверен.



Отредактировано doza_and (Авг. 8, 2021 09:42:56)

Офлайн

#5 Авг. 8, 2021 15:01:12

Silos
Зарегистрирован: 2021-08-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

doza_and
Silos???Будь я преподаватель то не принял бы ваш код.У вас половина кода не используется. Считай она просто мусор.Вы не понимаете назначение функции get. Она нужна для для задания значений по умолчанию.Если для каких-то аргументов функция вернет None,0,tuple(),…. То хеширования не произойдет. Это прямое нарушение требований задания. Следовательно ваш код неверен.

Так а как его сделать правильно?

Офлайн

#6 Авг. 8, 2021 15:12:01

Silos
Зарегистрирован: 2021-08-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче

doza_and
Silos???Будь я преподаватель то не принял бы ваш код.У вас половина кода не используется. Считай она просто мусор.Вы не понимаете назначение функции get. Она нужна для для задания значений по умолчанию.Если для каких-то аргументов функция вернет None,0,tuple(),…. То хеширования не произойдет. Это прямое нарушение требований задания. Следовательно ваш код неверен.

метод get() возвращает значение для данного ключа, если ключ недоступен, возвращается значение по умолчанию None

dict.get(key, default=None)

Офлайн

  • Начало
  • » Центр помощи
  • » Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version