본문 바로가기

개발/Python

[Python] 기초 학습 - 함수(1회차)

입력이 들어오면 결과를 내보내는 것이 함수입니다.

 

어렸을 때 배웠던 y = 2x와 같은 수학적 함수도 함수입니다. x(입력)가 들어오면 y(결과)를 내보는 것은 동일합니다.

 

함수를 잘 사용하면 개발자에게 편리하고, 가독성을 높이고 유지보수를 편하게 해 줄 수 있도록 도와줍니다.

 

Python에서 함수는 def 키워드를 사용합니다. Javascript는 function을 사용합니다.

# 입력은 param
def func_name([param[=default]]):
	# 수행
    
    # 결과 반환
    [retrun result]

입력과 결과는 있을 수도 있고 없을 수도 있습니다. 또한 입력값이 없어도 기본으로 값을 설정해 둘 수 있습니다.

default를 사용한 경우 해당 매개변수는 맨 뒤로 미뤄야 합니다. 그렇지 않으면 인수를 입력할 때 어떤 매개변수가 받았는지 알 수 없기 때문입니다.

 

입력은 상황에 따라 달라지는 경우 몇 개를 받아야 할지 모를 때가 있습니다. 상황에 따라 사용할 수 있는 방법들이 있습니다.

def func_name(*args):
    # 수행
    
    # 결과
    return result
    
def func_name(**kwargs):
    # 수행
    
    # 결과
    return result

*args으로 입력을 받게 되면 달라지는 것은 해당 매개변수의 타입이 tuple이라는 것입니다. 하지만 정확한 매개변수를 지정해주지 않는 경우 예외 처리를 잘해줘야 합니다.

 

**kwargs의 경우 매개변수 타입이 dictionary입니다. 이때는 key=value 형태로 값을 입력받아야 합니다.

Javascript에서도 인자를 여러 개 받는 방법이 있습니다. ...(spread operator)를 사용하면 됩니다.
function func(a,b, ...rest) {...} 이와 같이 사용하면 나머지 인수를 배열로 받을 수 있습니다.

 

result에는 둘 이상의 결과를 반환하는 경우도 있습니다. 이때 return rst1, rst2로 반환할 수 있습니다. 여기서 알아두어야 할 점은 해당 결과의 타입은 tuple이라는 점입니다.

인수로 리스트, 딕셔너리를 사용할 경우 변수 파트에서 학습했던 얕은 복사를 통해서 변수가 사용되기 때문에 원본이 변경될 수 있다 점을 주의해야 합니다.

 

익명 함수라고 이름이 없이 간단하게 함수를 만들어서 사용할 수 있는 방법이 있습니다. lambda 키워드를 활용하면 됩니다.

func_name = lambda prams: expression

 

추가적으로 함수를 설명할 수 있는 방법이 있습니다. 마치 Javascript에서 사용하는 JSDoc과 같은 역할입니다.

def func_name(a, b):
	"""
    description
    
    Parameters:
    a (types): desc
    b (types): desc
   	
    Return:
    type: desc
    """
    
    return result
    
print(func_name.__doc__)

 

참고

https://wikidocs.net/23