0

Decorators in Python. Why doesn't work with two arguments?

Now I am learning decorators in Python and trying to do some practice. With no arguments, just if I want to print sentence, It is alright, decorator works. But if want to try with math, do some addition like example, I've got error message: TypeError: wrap() takes 0 positional arguments but 2 were given. Here is my code on playground https://code.sololearn.com/cd0AA7IGPxBs/#py Can somebody help me, where I did mistake or maybe it is impossible to do at all?

2nd Jun 2020, 8:02 PM
Sigitas S
Sigitas S - avatar
4 odpowiedzi
+ 5
You have to pass parameters to inner wrap in decorator function and as well as to function you want to decorate , something like this def apdaila(fn): def wrap(z,t): print("^^^^^^^^^^") fn(z,t) print("**********") return wrap def matem(): print('x + y') matem() @apdaila def sudeti(z,t): print(z + t) sudeti(8,9) But then you can't decorate a different function(talking about matem,because then you will have to provide it arguments as well) without arguments ,
2nd Jun 2020, 8:34 PM
Abhay
Abhay - avatar
+ 3
maklaudas May be return wrap() In your variant is return wrap
2nd Jun 2020, 8:20 PM
Petr
+ 2
If you use return wrap() you don't need to assign the decor(print_text) to variable and then call it ,it can be called just by printing decor(print_text)
7th Jun 2020, 9:52 AM
Abhay
Abhay - avatar
0
@Petr as I know and as sample given on this lesson, exactly return wrap should be correct: def decor(func): def wrap(): print("============") func() print("============") return wrap def print_text(): print("Hello world!") decorated = decor(print_text) decorated()
7th Jun 2020, 9:40 AM
Sigitas S
Sigitas S - avatar