일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- westagram
- nodeJS
- 호이스팅
- typescript
- 실행 컨텍스트
- OSI7계층
- pm2
- 트랜잭션
- docker
- JWT
- node
- async/await
- 노드
- status code
- django westagram
- on_delete
- manytomanyfield
- wecode
- rebase
- crud2
- 스코프
- TypeError: this.boardRepository.createBoard is not a function
- Django
- CORS
- javascript
- bcrypt
- 자바스크립트
- 장고초기세팅
- Jest
- 프로미스
- Today
- Total
될때까지
((Python)) Function Parameters 본문
## 오늘의 과제 ##
- 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보시고 블로깅 해주세요.
- 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
- 가변 키워드 인수 (variable length keyword arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
- 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
1. 함수를 정의할 때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유
초깃값을 미리 정의한 함수의 파라미터를 default value parameter라고 한다. 이렇게 초깃값이 정의된 파라미터는 함수가 호출될 때 값을 따로 넘기지 않아도 미리 설정해둔 초깃값이 넘어가게 된다.
def hello(name, greeting = "안녕하세요"):
print(f'{name}님 {greeting}')
hello('아이유')
# 출력값은 '아이유님 안녕하세요'
만약에 초깃값이 정의된 파라미터를 초깃값을 정의하지 않은 파라미터보다 앞에 선언하면 syntax error가 난다.
def hello(name="아이유", greeting):
print(f'{name}님 {greeting}')
hello('팬이에요!')
# SyntaxError: non-default argument follows default argument
❗️왜 에러가 발생하나요?
함수의 파라미터에는 우선순위가 있다. 그래서 복수의 파라미터가 요구되면, 초깃값이 있는 매개변수는 맨 뒤에 위치시킨다!!
- arguments랑 parameter의 차이점은?
* parameter(매개변수)는 함수을 정의할 때 옆에 사용하는 변수 / 함수를 호출할 때 전달되는 실제 값은 argument(전달인자)
위의 사진에서 보면 왼쪽에서부터 우선순위가 높다. 그렇기 때문에 regular positional argument가 default arguments보다 먼저 와야하는데 순서가 맞지 않아서 에러가 발생했다. name="아이유"의 위치를 맨 마지막으로 옮기면 에러없이 실행이 된다.
2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
# TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
- 위치인수란? : 함수에 인수를 순서대로 넣는 방식으로 가장 많이 사용하는 방식이라고 생각하면 된다. 첫번째자리 첫번째에, 두번째꺼 두번째에!
- 가변인수(*args)란? : 가변의 뜻은 '변할 수 있다'. 즉 인수의 갯수가 변할 수 있다는 뜻!! *args를 주로 써서 나타내며, 인자를 1개가 아닌 4개 혹은 그 이상 전달해주어도 된다!! 가변인수는 전달받은 임의의 갯수 인자들을 튜플형태로 저장한다.
위의 코드를 실행했더니 TypeError가 발생했다. 정우성은 name에 할당되지만, 그 다음부터는 가변인수 *args를 만나 호출시 넣어준 인자값들 01012341234 , seoul, 20이 모두 *args의 값이 되버린다. 그래서 age의 매개변수가 없다고 에러가 발생한다. 이를 해결하기 위해서는 *args의 위치를 바꾸거나 age를 콕 찝어서 대입해주면 된다.
# 방법1
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", 20, "01012341234", "seoul")
# 방법2
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", age=20)
3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# SyntaxError: invalid syntax
- 가변 키워드 인수란(**kwargs)? : 키워드=특정값!의 형태로 키워드 인수의 갯수가 변할 수도 있을 때 사용한다. 전달받은 키워드 인자는 딕셔너리 형태로 저장한다.
위에서 정리한 내용처럼, 초깃값이 있는 address는 name이나 age보다 앞에가면 안된다!! **kwargs의 위치는 맨 마지막이다. address와 **kwargs의 위치를 바꾸면 에러없이 잘 실행이 된다.
def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# name=정우성
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# SyntaxError: invalid syntax
함수를 선언할 때 만들었던 파라미터의 순서와 호출할 때 들어오는 인자의 순서가 맞지않는다. 순서에 맞게 파라미터의 위치를 바꾸면 에러없이 실행된다.
def mixed_params(age, name="아이유", *args, address, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# name=정우성
# args=('01012341234', 'male')
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
🤸🏼♂️ 마무리
위치인자 - 초깃값 인자 - 가변인자(*args) - 키워드 인자 - 키워드 가변인자(**kwargs)
여기서 말하는 키워드 인자란, "키워드인자이름=value"처럼 키워드 인자로 호출해야 한다는 뜻이다 바로 위의 코드에서 address="seoul"처럼 :)
함수를 정의할 때에는 에러가 발생하지 않게 꼭꼭 매개변수의 순서를 지켜가며 작성하자!
'프로젝트 > wecode' 카테고리의 다른 글
((Python)) Replit 55. Class (0) | 2022.06.23 |
---|---|
((Python)) Set vs Dictionary, List vs Tuple (0) | 2022.06.23 |
((Python)) data type, variable, math expressions (0) | 2022.06.22 |
((CSS)) position 속성 - relative, absolute, fixed (0) | 2022.06.21 |
((CSS)) display속성의 block,inline,inline-block의 차이점 (0) | 2022.06.21 |