하.. 진짜 어렵네...따흡..
코드순서와 상관없이 값이 parameter로 함수에 전해진다.
순서 대신에 parameter에 이름을 지정해서 값을 전달한다.
순서가 바뀌어도 가능!
positional argument와 keyword argument를 혼용하여 사용해도 된다.
keyword argument의 순서는 바껴도 상관없지만 positional argument부분은 순서를 지켜줘야한다.
아니면 다음의 에러가 뜬다.
def love_you(my_name, your_name):
print(f"{my_name} loves {your_name}")
love_you(your_name = "아이유", "정우성") #이부분이 문제
> Traceback (most recent call last):
File "python", line 1
SyntaxError: positional argument follows keyword argument
이유는 keyword argument가 positional argument보다 더 앞에 위치해서!
Positional arguments 는 순서를 지켜주어야 한다~
default 값 정의하기
디폴트 값이 정의된 parameter는 함수가 호출될때 값이 넘겨지지 않아도 자동으로 넘어간다.
여기서 주의!
정의된 parameter가 default값이 정의되지 않은 parameter보다 먼저 위치해 있으면 안된다.
문제!
일단 디폴트값을 정의한 매개변수를 정의되지않은 매개변수 앞에 정의하면 이러한 에러가 뜬다.
SyntaxError: non-default argument follows default argument
내 생각엔 이미 디폴트값을 갖고 있는 매개변수는 입력을 하지 않기 때문에 입력해야하는 변수의 값이 적어질 것이다. 따라서 어느 position에 정의되지 않는 매개변수가 있는지 찾아야기 때문에 그 계산을 또 추가적으로 해줘야해서 오류가 뜨는 것 같다.
이렇게 오류가난다.
이유는 고정되어있는 *args
가 중간에 껴있기 때문에 끝으로 옮겨준다.
짜잔...
키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개를 붙인다.
이것도 마찬가지로 **kwargs'
를 맨뒤로 보낸다.
에러그만..
args는 정해지지 않은 수의 (일반)파라미터를 받고
kwargs는 정해지지 않은 수의 키워드파라미터를 받는다.
순서를 age,name="아이유", *args,address,**kwargs
로 바꿔주었다.
성지순례왔어요😇