btw to continue the topic, there are such things as *args, **kwargs, which are especially useful in decorators or wrappers, it can intercept all the arguments you pass, and give it as a list and dict respectively
Also there is a cool trick with star operators when you pass arguments to the func, example:
defexample(a,b,c='default'):print("a is {}, b is {}, c is {}".format(a,b,c))example_args={'a':1,'b':2}ifSOME_CONDITION:example_args.update(c=20)example(**example_args)# or
network_info={'my_ip':"192.168.0.1",'host_ip':"192.168.0.100",'info':"Some info",'unused_argument':'Some unused thing'}print('''Your ip is {my_ip}, you are trying
to reach the host {host_ip},
info: {info}'''.format(**network_info))
Also, star can be used to have "keyword-only" arguments, example:
defa(a,*,b):print(a,b)# a(1, 2) -- TypeError: a() takes 1 positional argument but 2 were given
# a(1) -- TypeError: a() missing 1 required keyword-only argument: 'b'
# a(1, b=2) -- ok
BUT!
I would not recommend to overuse *args, **kwargs in your regular function, though it's flexible, since you can pass anything you need from outside to the function, but any minor typo or change can break all the things.
Heh, nice post!
btw to continue the topic, there are such things as
*args, **kwargs
, which are especially useful in decorators or wrappers, it can intercept all the arguments you pass, and give it as a list and dict respectivelyAlso there is a cool trick with star operators when you pass arguments to the func, example:
Also, star can be used to have "keyword-only" arguments, example:
BUT!
I would not recommend to overuse
*args, **kwargs
in your regular function, though it's flexible, since you can pass anything you need from outside to the function, but any minor typo or change can break all the things.NOTE
Some of things work only on python3+
Thanks for sharing! Really good tricks!