We.TIL 04 : Function Parameters

김기욱·2020년 7월 22일
0

We.TIL

목록 보기
3/69

Python Assignment #1

default value parameter는 왜 non-default parameter앞에 정의 하면 안될까?

예제로 살펴보자

다음과 같은 함수식을 세울 경우 positional argument 입력된 kate가 input되고 두 번째 차례에 입력이 안 되어있으므로 default value parameter인 john이 대신 input되게 된다.

즉 Parameter default값으로 내장한 john은 대기중인 불펜투수같은 존재다.
second에 john이라고 지정되어있다고 출력이 무조건 john으로 되는게 아니라 argument에 새로운 값을 입력하면 그 값이 출력되는 것이다. 서..선발이 먼저다!

그러므로 다음과 같은 함수들도 문제없이 출력된다.

자 그렇다면 defult value parameter가 non-defult value parameter앞으로 온다면 무슨일이 발생할까?

그건 선발투수가 출전도 안 했는데 뜬금없이 불펜투수가 구장에 등판해 있는 것과 마찬가지다. 함수 호출 시 넘기는 파라미터의 개수(로스터에 있는 선발투수 수)가 달라져 버리니 감독들도 심판도 이게 뭐지라고 할 수 밖에 없다.
파이썬에서는 이에 "syntax error"라고 에러메시지를 낼 수 밖에 없게 되는 것이다.

Python Assignment #2

위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고쳐주세요.

실행부터 해보자

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

에러가 발생합니다. 1개의 keyword-only argument가 필요하다고 합니다. 이런 에러가 발생한 이유를 알려면 args*가 kargs** 가 무엇인지 또 올바른 argument 배치 순서를 알아야한다.

*args(=Variable length positional args) 쉽게 이해하자면 인자(파라미터)당 인수 하나밖에 입력 못하는 한계를 극복하기 위해 나타난 인수라고 보면된다. 앞에 파라미터들이 할당하고 남은 인수를 이녀석이 모두 할당받아 튜플형태로 함수에 넘겨줘 버린다.

**kargs 뭐 별거없는 녀석이다. *args 와 **kargs 의 차이는 튜플형태로 주느냐 딕셔너리 형태로 주느냐의 차이다.

자 그렇다면 다양한 종류의 args(argument) 순서를 확인해보자.
(참고로 여기서 말하는 순서라는 것은 컴퓨터가 일정하게 입력받도록 기본적으로 내장되어있는 '순서'란 의미다.)

Regular positional args -> Default args -> Variable length positional args -> Non-default args -> Non- default keyword-only args / Keyword-Only args with default -> Variable length kwargs** 순이다.

name, age는 regular positional args
args 는 Variable length positional args다.
name, age,
args 순으로 와줘야 한다.

name=정우성
args=('seoul', 20)
age=01012341234

으로 정상적으로 출력되는것을 확인할 수 있다.

Python Assignment #3

가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 정리해 주세요.

SyntaxError: invalid syntax

똑같은 원리의 오류다. 해결법 역시 순서를 바꿔주면 된다.
name, age는 Positional args
address=0은 Default args
**kargs 는 Variable Length Keyword Args다.
이 순서대로 가야한다.

정상적으로 출력되는 것을 확인 할 수 있다.

name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul

Python Assignment #4

위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 정리해 주세요.

SyntaxError: invalid syntax

name=아이유
args=('정우성', '01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}

age = positional
*args = variable length positional
name = keyword only with default
address = non default keyword only
**kwargs = varaible length keyword

순서 그대로 배치해주면 문제없이 출력이 된다.
name과 address는 같은 keyword args므로 앞뒤 순서를 바꿔도 상관이없다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글