https://peps.python.org/pep-3102/ 에 나온 내용입니다.
함수의 parameter 가 길어지다보면 foo(1, 2, ‘bar’, 4) 처럼 position으로 인자를 모두 넘기기보다 keyword argument로 foo(param1=1, param2=2) 형태의 코딩을 사용해야 실수를 줄일 수 있을때가 있습니다. 또는 매개변수가 필수는 아닌 옵션의 성격일 때도 있습니다.
앞서의 PEP는 keyword 형태로 인자를 지정하도록 강제하는 방법으로 문법은 다음과 같습니다.
def(param1, param2, *, keyparam1, keyapram2):
pass
본래 * 는 개수가 정해지지 않은 가변길이 인자를 사용하는 것인데, 이 문법이 확장되어 * 에는 이름을 주지 않으면서 그 뒤에 나오는 인자는 keyword=val 형태로 인자를 넘기도록 강제합니다.
반면 positional only로 인자를 주도록 강제할 수도 있습니다. 예를들어
def foo(a, b, /, c, *, d)
에서 a, b 는 positional only, d 는 keyword only 입니다. c는 어떤 방식으로도 인자를 지정할 수 있습니다.