All required parameters must be placed before any default arguments. Simply because they are mandatory, whereas default arguments are not. Syntactically, it would be impossible for the interpreter to decide which values match which arguments if mixed modes were allowed. A SyntaxError is raised if the arguments are not given in the correct order:
Let us take a look at keyword arguments, using your function.
def fun1(a="who is you", b="True", x, y):
... print a,b,x,y
Suppose its allowed to declare function as above, Then with the above declarations, we can make the following (regular) positional or keyword argument calls:
func1("ok a", "ok b", 1) # Is 1 assigned to x or ?
func1(1) # Is 1 assigned to a or ?
func1(1, 2) # ?
How you will suggest the assignment of variables in the function call, how default arguments are going to be used along with keyword arguments.
>>> def fun1(x, y, a="who is you", b="True"):
... print a,b,x,y
...
Reference O'Reilly - Core-Python
Where as this function make use of the default arguments syntactically correct for above function calls. Keyword arguments calling prove useful for being able to provide for out-of-order positional arguments, but, coupled with default arguments, they can also be used to "skip over" missing arguments as well.
ref: https://stackoverflow.com/a/16933624
<정리>
함수는 일정한 작업을 수행하는 코드 블럭이다. 반복적으로 실행하는 코드를 함수로 정의해서 간단하게 인수를 호출하는 식으로 사용할 수 있다. 함수를 원하는 값을 parameter로 넘겨줘서 호출할 수 있다. parameter는 여러 형태가 있는데 가장 기본적인 형태는 순서대로 값이 함수에 전해지는 것이다. (postitional parameter) 함수로 전달되는 인수를 순서대로 채워넣는다.
- (a,b) positional parameter
Parameter에 default값을 정의해 줄 수도 있는데 이 parameter는 함수가 호출될때 값이 넘겨지지 않아도 괜찮다. 자동으로 default값이 넘겨지게 된다. 만약 default 값이 정의된 인수가 먼저 위치해있으면 문법적 오류가 생기는데, 이 이유는 파이썬에서 그 default 값이 어떤 인수를 말하는 건지 알 수 없기 때문이다. 따라서 반드시 기본값이 정의해있지 않은 parameter가 먼저 위치해 있어야 한다.