0

Python decorator argument

How can i put an argument in a function with a decorator?: def decor(func): def wrap(): print("============") func() print("============") return wrap @decor def print_text(x): print(x) print_text(5); How can i make this work? func() dosnt take arguments

24th Sep 2018, 2:08 PM
gil gil
6 ответов
+ 6
def func(**kw):print(kw) func(a=1, b=2) # {"a": 1, "b": 2}
24th Sep 2018, 2:54 PM
Mert Yazıcı
Mert Yazıcı - avatar
+ 3
It doesn't take arguments because you didn't allow it to do so. If you read your tutoriual further, you'll see the detailed explanation of the problem you encountered. You need to let wrapper take arguments and pass them to the wrapped function: def decor(func): def wrap(*args, **kwargs): print("============") func(*args, **kwargs) print("============") return wrap @decor def print_text(x): print(x) print_text('Sololearn') ------------------------------------------------ This will give you ============ Sololearn ============
24th Sep 2018, 2:18 PM
strawdog
strawdog - avatar
+ 2
Asterisks are not pointers in Pythons. Think of them as of unpacking operators. Single '*' is used for non-keyworded arguments to a function , double - for keyworded arguments. This notation is used to allow a function to accept variable number of arguments (or none) in case you do not know how many and what type of arguments you are going to pass to the function. Consider we defined a function: def a (*args, **kwargs): print(locals()) Then with different arguments this function will work correctly like this: >>> a(1) {'args': (1,), 'kwargs': {}} >>> a([1,2,3]) {'args': ([1, 2, 3],), 'kwargs': {}} >>> a({1:1,2:2}) {'args': ({1: 1, 2: 2},), 'kwargs': {}} >>> a(x=5, y=6) {'args': (), 'kwargs': {'x': 5, 'y': 6}} >>> a([1,2,3], x=5,y=6) {'args': ([1, 2, 3],), 'kwargs': {'x': 5, 'y': 6}} >>> And, finally: >>>a() {'args': (), 'kwargs': {}}
24th Sep 2018, 3:14 PM
strawdog
strawdog - avatar
24th Sep 2018, 2:51 PM
gil gil
0
can u tell me what **kwargs means, and what is the use of the pointers,basiclly how this works?
24th Sep 2018, 2:52 PM
gil gil
0
thanks ,thats very helpful
24th Sep 2018, 3:16 PM
gil gil