Library code I am reading is full of signatures like def send(self, *args, **kwargs): and calls like plot(*points, **style). I also found def move(x, y, *, speed=100): with a lone star, and a function with a / in its parameter list.
I understand positional and keyword arguments in simple cases. What do the single and double star do in a definition compared with a call, what are the bare * and / for, and is it good practice to accept *args, **kwargs in my own functions?




