PYTHON - decorator/funkcja wyzszego rzedu

0

Witam

Mam następującą funkcję:

def abc(x)
    return x

Mam teraz dodać taki decorator, aby zostało zwrócone nie x, tylko -x. Ma to wyglądać tak:

@my_decorator
def abc(x)
    return x

Jak to mozna zrobic?

0

Mógłbym Ci napisać od razu gotowca, ale zrobię coś lepszego i pozwolę Ci samemu na to wpaść (czyli zrozumieć):

przystępna odpowiedź: http://stackoverflow.com/questions/739654/understanding-python-decorators
ew. dokumentacja: http://docs.python.org/reference/compound_stmts.html#function

0

hmmm sam sie ucze python'a i ok kod dziala...

 
if __name__ == "__main__":

    def dec_minus(value):
        def wrapper(value):
            return -1 * value
        return wrapper

    @dec_minus
    def abs(value):
        return value

    print(abs(2))

mam tylko pytanie dlaczego funkcja wrapper musi tez posiadac arg. value skoro jest zagniezdzona w dec_minus wiec powinna posiadac to sama zmienna?
I jak to zrobic za pomoca klas?
probowalem ale zawsze byl problem z arg.

0
def minus_result(FUNKCJA_DO_OPAKOWANIA):
	def wrapper(*args, **kwargs):
		return -FUNKCJA_DO_OPAKOWANIA(*args, **kwargs)
	return wrapper
	
@minus_result
def my_abs(number):
	return -number if number < 0 else number
	
print([ my_abs(n) for n in range(-5, 5) ])

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.