본문 바로가기
프로그래밍/파이썬 문법

호기심 파이썬(함수 사용법 2탄 : **kargs, 나를 다시 호출하는 재귀함수)

by 인성패밀리 2022. 7. 3.
반응형

이번에는 매개변수로 딕셔너리 형태로 전달하는 **kargs와 나를 다시 호출하는 재귀에 대해서 알아보겠습니다.

 

1. 키워드와 값을 전달하는 **kwargs

키워드와 함께 값을 함수로 딕셔너리 형태로 전달하는 매개변수입니다.

예제와 함께 간단한 사용법을 알아보겠습니다.

def function2(**kwargs):
    print(kwargs)


function2(pi=3.141592, sqrt2=1.414)

결과 값은 아래와 같습니다.

{'pi': 3.141592, 'sqrt2': 1.414}

 

함수의 매개변수 부분에 **kwargs의 **은 키워드와 값을 전달해주는 기능을 의미하며 뒤의 kwargs는 단순 변수 이름입니다. 그러므로 이름은 아무거나 해도 되지만 **은 유지해야 합니다.

 

매개변수를 총 정리해보겠습니다.

def function2(para1, para2=777, *args, **kwargs):
    """para1은 일반 매개변수, para2는 옵셔널 파라미터, *args는 여러 값을 받는 변수, **kwargs는 키워드와 값을 받는 변수"""

일반 변수(옵셔널 파라미터 포함) -> * -> ** 순으로 매개변수를 입력해야 함수를 오류없이 사용할 수 있습니다.

 

 

2. 나 자신을 다시 호출하는 재귀함수

재귀 함수란 특별한 형식이 있는 것이 아닌 함수를 함수 안에서 호출하는 방식을 재귀함수라고 합니다.

 

개인적으로 재귀적 표현을 좋아하지는 않습니다. 재귀의 깊이가 깊어질 수록 순차적으로 생각하기 복잡하기 때문입니다.

통상적으로 반복문에 비해서 코드가 간결해진다는 장점이 있으며 단점으로는 속도가 느리다는 것입니다.

 

def recursion_loop(n, total=0):
    """n까지의 합"""
    total += n
    if n == 0:
        return total
    return recursion_loop(n-1, total)


test = recursion_loop(10)
print(test)

# 일반적인 loop
total2 = 0
for i in range(1, 11):
    total2 += i
print(total2)

함수 내부 코드를 보면 만약 n이 0이면 return하여 더 이상 재귀가 진행되지 않게 막아놓았습니다. 파이썬에서 재귀는 약 1000번 밖에 허용하지 않아 만약 멈추는 것이 없다면 끝없이 재귀가 진행될 것입니다. 그렇다면 너무 깊이 들어갔다고 에러 메세지가 보이게 될 것입니다.

조건문을 통과하지 못하였다면 반환을 하는데 함수를 호출하고 있습니다. 자기 자신을 다시 호출했으므로 이를 재귀함수라고 합니다.

반응형

댓글