Also, when we have keyword arguments provided as parameters in a function and we then want to call it with different values for these parameters, do we still have to type in the name of the parameter and set it equal to the new value of the argument that we are passing?
If you were to call this function without any other arguments, draw_shape(), it runs as if you passed those values as arguments to the function, shape_name="box" etc…
In your example your arguments are no different to the defaults so the function behaves in the same way. Try altering these arguments, e.g. character="O" if you want to see the differences.
Keyword arguments are those passed to a function with a given parameter name (name=x). So the name keyword arguments refers to those you include in the function call itself (not in the definition of the function, those would be the default arguments).
You could pass those values in as positional arguments… e.g. draw_shape("box", "o", True) but being positional the order must then match the order of the parameters themselves so no you don’t have to pass keyword arguments in.
This reply might be useful if the two terms are still not clear-