Function(함수), Parameter

JM·2020년 5월 26일
0

Python

목록 보기
2/5

Function(함수)

함수(function)는 일정한 작업을 수행하는 코드블럭. 함수를 사용하는 이유는:

  1. 반복되어 계속 사용되는 코드들을 함수로 정의하여 효과적으로 사용하기 위해.
  2. 함수로 정리를 해서 코드의 가독성을 높이기 위해.

Function Parameters

함수의 parameter에는 여러 형태가 있다.

먼저 가장 기본적인 형태는 이와 같다

Keyword Arguments

순서 대신에 parameter 이름으로 맞추어서 값을 전해줄 수 있는데 이를 keyword argments라고 한다.
Keyword arguments 방식으로 parameter 값을 전해주면 실제 parameter 순서가 바뀌어도 상관X.

Mixing positional arguments and keyword arguments

순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능.

다만 중요한것은 keyword arguments 는 순서가 바뀌어도 상관 없지만 positional arguments 부분은 순서를 지켜줘야 한다. 예를 들어, 다음 처럼 함수를 호출하면 error가 난다.

Parameter Default Value

함수의 parameter에 default 값을 정의해 줄 수 도 있다. Default 값이 정의된 paramter는 함수가 호출될때 값이 넘겨지 않아도 괜찮음. 값이 넘겨지 않은 경우 default 값이 자동으로 넘겨지게 된다.

다만 조심해야 할점은 default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter 보다 먼저 위치해 있으면 안된다는 점. 만일 default value parameter를 non-default value parameter 앞에 선언하면 syntax error가 난다.

오류가 발생하는 이유는 파라미터를 정의하는 순서 없이 무작위로 생성 시 함수는 어떤 파라미터에 어떤 값을 받아야 될 지 정할 수 없기 때문.
함수에 들어갈 파라미터의 혼동이 올 수 있기떄문에 default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter 보다 먼저 위치해 있으면 안된다.

실행 에러들을 통해 학습하기

def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
args = arguments의 줄임말, 여러개의 인자를 함수로 받고자 할때 사용한다.

func_param_with_var_args("wecode", "01012341234", "seoul", 20)

실행시 해당 에러를 확인할 수 있는데

Traceback (most recent call last):
File "<pyshell#3>", line 1, in
func_param_with_var_args("wecode", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

이는 가변 매개변수를 앞에 사용하고 뒤에 일반 매개변수를 사용할 시
함수를 사용할때 keyword argments 방식을 사용하여 키워드를 지정해줘야한다.

func_param_with_var_args("wecode", "01012341234", "seoul", age =20)
name=wecode
args=('01012341234', 'seoul')
age=20
결과

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("wecode", "20", mobile="01012341234", address="seoul")

해당 함수를 실행하게 되면 이와 같은 에러가 나는데

SyntaxError: invalid syntax

이는 가변 키워드 인수 (variable length keyword arguments)의 위치가 일반 변수보다 앞에 위치하기 때문이다. 파이썬의 가변 키워드 파라미터는 어디서 어디까지 가변 인수에 담을지 알 수 없기 때문에 가변인수는 뒤로 위치해야 한다.

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("wecode", "20",mobile="01012341234", address="seoul")

이렇게 결과가 나오는 것을 확인할 수 있다.

name=wecode
age=20
kwargs={'mobile': '01012341234'}
address=seoul
결과

def mixed_params(name="wecode", *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)

해당 코드를 실행하면

SyntaxError: invalid syntax

해당 에러를 확인할 수 있다. 이는 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치에 따른 에러이다. 다양한 방식의 인수들을 사용할땐 순서가 중요하다. 위 코드를 다음과 같이 수정한다.

def mixed_params(age,address,name="wecode",*args,**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,"seoul","wecode","01012341234","male" ,mobile="01012341234")

name=wecode
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
결과

이때 함수를 실행하면서 address="seoul"에서 "seoul"로 수정을 했는데 뒤에서 키워드 매개변수로 인식하여 에러가 나기때문에 수정을 하였다.

0개의 댓글