[TIL] Function Parameters

SEUNGCHAN BAEK·2021년 3월 18일
0

TIL

목록 보기
4/15

1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유

우선 default value parameter가 무엇인지 알 필요가 있다. default value parameter란 함수를 만들때 함수에 입력값을 넣지 않았을때 고정값을 갖는것이다. 쉽게 설명하면

def hello(a,b=1,c=2):
	return a + b + c

이렇게 a,b,c의 합을 반환하는 간단한 함수가 있다고 가정하면 일반적으로는 호출할때 hello(1,2,3) 이렇게 3개의 arguments를 입력해서 값을 반환시킨다. 하지만 위의 코드처럼 b=1,c=2 라고 함수를 만들때 고정값을 입력시키면 우리가 hello(1)이라고 입력을 하면 a 에 1이 할당되고 b,c에는 입력값을 넣지 않았기 때문에 고정값 b=1,c=2 이 자동으로 입력된다.

하지만 여기서 주의해야 될 점은 함수를 만들때 default value parameter가 non-default value parameter 앞에 오면 안된다. 파이썬에서는 함수에 어떤 값을 입력시킬때 왼쪽에서 오른쪽 순서의 방향성이 있다.

따라서 default value parameter를 non-default value parameter 앞에 정의하고 argument를 1개만 전달하면 해당 argument는 default value parameter에 할당되므로 non-default value parameter는 할당받는 값이 없기 때문에 오류가 발생한다.

2. 위치 인수 (positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 만들어보기

위치 인수란 함수를 호출할 때 전달되는 값이 매개변수에 순서대로 전달되는 인수를 의미하며, 가장 자주 사용되는 방식이다

가변 인수란 인수의 개수가 변할 수 있다는 의미이며, 가변인수를 전달받는 함수란 함수를 호출할 때, 인수의 개수를 다양하게 바꿔가며 사용할 수 있는 함수를 의미한다. 쉽게 설명하면,

def hello(a, *args):
    print(args)
    return a + sum(args)

hello(1,2,3,4,5)

(2, 3, 4, 5)
15

hello 함수에 다섯개의 argument를 입력하면 첫번째 1 의 값은 a에 할당되고 나머지 4개의 값은 튜플 형태로 args에 할당되는것을 볼 수 있다. 여기서 주의해야 될 점이 있다. *args의 위치가 중요한데 만약에

(name, args, age) 처럼 args가 name, age 매개변수 사이에 위치하게 되면 에러가 발생한다.

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

에러가 발생하는 이유는 만약 1,2,3,4,5 값을 입력시킨다고 가정하면 1은 name에 할당되지만 나머지 2,3,4,5는 args에 할당되어 age에 아무런 값도 할당되지 않는다. 이러한 에러를 방지하려면 (name, age, args) 처럼 가변인수를 맨 마지막에 입력해서 함수를 만들어야한다.

3. 가변 키워드 인수 (variable length keyword arguments)

임의의 개수의 키워드 인자도 받을 수 있게 함수를 만들수도 있다. 쉽게 설명하면

def hello(a, **kwargs):
    print(kwargs)
    print(a)

이렇게 간단한 함수가 있다고 가정하겠다.

hello(1,flag=True, mode='fast', header='debug')

{'flag': True, 'mode': 'fast', 'header': 'debug'}
1

hello 함수에 1 과 여러개의 키워드 인자를 입력하면 키워드 인자들은 kwargs에 딕셔너리 형태로 할당되는것을 볼 수 있다.

여기서 주의해야 될 점은 default arguments 와 함께 사용할때이다.

위 사진처럼 파이썬에서는 함수를 만들때 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)

위 코드처럼 Default Arguments가 Variable Length Keyword Arguments 뒤에 위치하면 오류가 발생한다.

SyntaxError: invalid syntax

**kwargs 와 address=0 의 위치를 바꿔주면 오류가 해결된다.

4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치

SyntaxError: invalid syntax

이 함수에서도 3번과 같은 에러가 발생한다. Arguments들의 위치가 잘못되었는데 (age, *args, name="아이유", address, **kwargs) 순서로 바꾸면 에러가 발생하지 않는다.

결과값 :

profile
백엔드 개발자가 되는 그날까지

0개의 댓글