Assignment1.함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다.
왜 안돼야만 하는지 생각해보시고 블로깅 하여 채널에 공유해 주세요.
총 4가지의 매개변수 종류가 있습니다.
위치 매개 변수
기본 매개 변수
키워드 매개 변수
가변 매개 변수 (튜플 형, 사전 형)
가장 기본적인 매개변수 입니다.
함수 호출 시 정해놓은 순서 그대로 매개변수를 입력 해야 합니다.
함수 정의 - def test(a, b, c):
함수 호출 - test(1, 2, 3)
순서와 개수가 처음 정의한 것 그대로 가야 합니다.
또한 위치 매개 변수와 다른 매개 변수를 함께 쓰실 때에는 위치 매개 변수를 제일 앞에 쓰셔야 합니다.
함수 선언 시 매개 변수의 Default 값을 입력할 수 있습니다.
만약 함수 호출 시 해당 매개변수가 입력 되지 않았으면 Default로 설정한 값이 들어가게 됩니다.
만약 함수 호출 시 다른 값이 전달 된다면 해당 값으로 업데이트 됩니다.
함수 정의 : def test(a = 1, b = 2, c = 3)
함수 호출 1 : test() -> a : 1, b : 2, c : 3
함수 호출 2 : test(5, 4) -> a : 5, b : 4, c : 3
함수 호출 3 : test(5, 6, 7) -> a : 5, b : 6, c : 7
함수 호출 시 키워드를 지정 하여 매개변수를 입력 하게 되면 순서가 바뀌어도 문제 없이 전달이 됩니다.
함수 정의 : def test(a, b, c)
함수 호출 : test(c=5, b=4, a=3)
가변 매개변수는 튜플형과 사전형 두가지로 구분이 됩니다.
튜플형은 매개변수 앞에 '*' 가 붙게 됩니다.
전달 시 튜플로 전달이 됩니다.
함수 정의 : def test(*args)
함수 호출 : test(1,2,3,4) -> args : (1, 2, 3, 4)
사전형은 매개변수 앞에 '**' 가 붙게 됩니다.
전달 시 사전형으로 전달이 됩니다.
함수 정의 : def test(**args)
함수 호출 : test(a=1, b=2, c=3) -> args : {'a' : 1, 'b' : 2, 'c' : 3}
파라미터 내부의 인자 중 default argument가 앞 쪽에 위치하게 된다면 인자가 들어갈 곳이 애매모호해지는 것.
default 값 파라미터 자체가 입력이 될 수도, 안될 수도 있는 값이기 때문에, 정확히 원하는 값을 반환하는데 어려움이 있음.
이러한 일들을 방지하고자 함수에서 default 값이 없는 값이 앞 부분으로 오도록 설계해야한다.
Assignment2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
Error 내용 : func_param_with_var_args() missing 1 required keyword-only argument: 'age'
대충 보면 age가 뭔가 문제가 있는 듯 하다.
일단 *args가 뭔지 모르니까 찾아 보았다.
구글링 해보니 이렇다고 한다.
내 생각엔 *args 가 age의 값까지 다 가져가서 age에 아무값도 없는 듯 하다.
그래서 이렇게 지정을 해주었더니 잘 돌아간다.
그리고 구글링을 해서 이렇게 된다는 것도 알았다.
이렇게 해주고 결과를 보니
잘 된다 !
Assignment3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
Error 내용 : invalid syntax
무슨 Error인가 찾아보니 구문에 Error가 있을때 나오는 Error라고 한다.
뭐가 잘못되었는지 대충 짚어보았다.
대충 이렇게 수정하면 될 듯 싶다.
그래서 이렇게 바꿔주고
출력하니 잘된다.
왜 안됐었나 하니...
**kwargs
때문이라고 한다.
adress는 가변인수가 아니지만**kwargs
는 가변인수.
가변 인수의 특징은 가변 인수 이후에 나열되는 인자는 반드시 키워드 인자로 전달이 되게 된다.
그래서 address 값이**kwargs
로 들어가기 때문에 에러가 났었다.
Assignment4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.
출력해보면
에러가 난다.
에러 내용을 봤을때 구문이 잘못된 것 같다.
구글링결과
함수 내에서 사용하는 arguments는 순서가 아래와 같이 정해져 있다.
1. positional(non-default) arguments
2. default arguments
3. variable length positional arguments(*arg)
4. keyword-only arguments
5. variable length keyword arguments(**kwargs)
이렇게 나오고
참고자료를 보니 이렇게 나온다.
그래서 함수내에서 사용하는 arguments의 순서를 바꿔주었다.
이렇게 되어 있는것을
이렇게 바꿔주었다. 그리고 실행을 하니
잘된다 !