Найти - Пользователи
Полная версия: Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче
Начало » Центр помощи » Прошу помощи. Вообще не могу понять что делать и как делать в данной задаче
1
Silos
Создать декоратор для функции, которая принимает неограниченное количество позиционных ХЕШИРУЕМЫХ элементов.

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

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

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

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


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

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

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

dict.get(key, default=None)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB