본문 바로가기
Pyhon 입문

(Python 입문 04편) def 함수, return문, 매개변수, 인수, lambda

by mangoseed3434 2026. 2. 9.

안녕하세요? mangoseed3434입니다.

 

이번 글에서는 함수(Function)에 대해 정리했습니다.
함수는 파이썬 문법을 이해하는 데 있어 매우 중요한 개념이며, 코드를 구조적으로 작성하는 데 핵심적인 역할을 합니다.

 


 

1. 함수란?

 

함수란 입력값을 받아 특정 작업을 수행한 후, 결과값을 반환하는 것입니다.


 

2. 함수를 사용하는 이유

 

함수를 사용하는 대표적인 이유는 2가지가 있습니다.

 

이유 1 : 반복되는 코드를 줄이기 위함

반복적으로 사용되는 가치 있는 로직을 함수로 만들어,

'어떤 입력값을 주면 어떤 결과값을 반환한다'라는 구조로 관리할 수 있습니다.

 

이유 2 : 프로그램 구조를 명확하게 만들기 위함

기능 단위로 함수를 분리하면 전체 프로그램의 흐름을 한눈에 파악할 수 있습니다.

 


 

3. 함수의 기본 구조

 
def 함수_이름(매개변수):
    수행할_문장1
    수행할_문장2

 

def : 함수를 정의할 때 사용하는 예약어

함수 이름 : 사용자가 임의로 지정

매개변수(parameter) : 함수에 전달되는 입력값을 받는 변수

 

기본적인 함수의 예시는 아래와 같습니다.

def add(a, b):
    return a + b

 

함수 이름 : add

입력값 : a, b

출력값 : a + b

return : 함수의 결과값을 반환하는 명령어

 

위 함수를 풀이하면 다음과 같습니다.

'위 함수의 이름은 add이다.

'입력으로 a, b 2개의 값을 받는다.'

'리턴값은 a, b 2개의 입력값을 더한 값이다.'

 
a = 3
b = 4
c = add(a, b)
print(c)

 

위 add함수의 매개변수에 인수를 대입하고 리턴값을 출력하면 7이 됩니다.

 

 


 

4. 매개변수와 인수의 차이

 
def add(a, b):
    return a + b

print(add(3, 4))

 

매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수

인수(argument) : 함수를 호출할 때 전달하는 입력값

 


 

5. 입력값과 리턴값에 따른 함수의 4가지 형태

 

입력값과 리턴값의 유무에 따라 함수를 크게 4가지로 구분할 수 있습니다.

 


 

① 입력값과 리턴값이 모두 있는 함수

 

가장 일반적인 함수의 형태입니다.

def add(a, b):
    result = a + b
    return result

c = add(12345, 6789)
print(c)

 

 

 

 

입력값과 리턴값이 모두 있는 함수의 기본 골격을 정리하면 아래와 같습니다.

def 함수이름(매개변수):
    수행할 문장
    ...
    return 리턴값

 


 

② 입력값은 없고 리턴값만 있는 함수

 

def say():
    return 'Hi'

a = say()
print(a)

 

 

입력값은 없고 리턴값만 있는 함수의 기본 골격을 정리하면 아래와 같습니다.

 

def 함수이름():
    수행할 문장
    ...
    return 리턴값

 


 

③ 입력값은 있고 리턴값이 없는 함수

 
 
def add(a, b):
    print("%d와 %d의 합은 %d입니다." %(a, b, a + b))

add(9876, 54321)

 

 

print는 출력만 할 뿐, 리턴값이 아닙니다.

리턴값은 오직 return명령어로만 돌려받을 수 있습니다.

 

입력값은 있고 리턴값이 없는 함수의 기본 골격을 정리하면 아래와 같습니다.

def 함수이름(매개변수):
    수행할 문장
    ...

 


 

④ 입력값과 리턴값이 모두 없는 함수

 

def say():
    print('미야비')

say()

 

 

입력값과 리턴값이 모두 없는 함수의 기본 골격을 정리하면 아래와 같습니다.

def 함수이름():
    수행할 문장
    ...
 

 

6. 매개변수를 지정하여 호출하기

 
def sub(a, b):
    return a - b

result = sub(a=7, b=3)
print(result)

result = sub(b=5, a=2)
print(result)

 

 

매개변수를 지정하면 순서와 관계없이 호출할 수 있습니다.

 


 

7. 입력값의 개수가 정해지지 않았을 때 (*args)

 

입력값이 다수일 경우에는 매개변수를 *매개변수로 작성합니다.

 
def add_many(*nums):
    result = 0
    for i in nums:
        result = result + i
    return result

 

*nums처럼 매개변수 앞에 *를 붙이면 입력값을 모아서 튜플로 변환시켜 줍니다.

 

print(add_many(1, 4, 67, 1776, 826))
print(add_many(4865, 12, 854))

 

 

result1과 result2는 각각 입력값이 다르지만 정상적으로 함수가 실행되는 모습입니다.

 


 

 

8. 일반 매개변수와 *매개변수 함께 사용하기

매개변수와 *매개변수를 사용할 수 있습니다.
 
def add_mul(choice, *numbers):
    if choice == "add":
        result = 0
        for i in numbers:
            result += i
    elif choice == "mul":
        result = 1
        for i in numbers:
            result *= i
    return result

 

위 예시는 choice에 입력되는 문자에 따라 다른 연산을 수행하는 함수입니다.

 

print(add_mul('add', 1,2,3,4,5,6,7,8,9))
print(add_mul('mul', 1,2,3,4,5,6,7,8,9))

 

choice가 add이면 입력값들의 합을 출력합니다.

choice가 mul이면 입력값들의 곱을 출력합니다.

 

 

이처럼 매개변수와 *매개변수를 같이 이용해서 경우에 따른 함수를 만들 수 있습니다.

 


 

9. 키워드 매개변수 (**kwargs)

 
키워드 매개변수는 매개변수 앞에 **를 붙여 작성합니다.

def print_kwargs(**kwargs):
    print(kwargs)
 
print_kwargs(a=1)
print_kwargs(name='foo', age=3)

 

 

매개변수 앞에 **을 붙이면 매개변수는 딕셔너리가 됩니다.

그리고 모든 Key = Value 형태의 입력값이 해당 딕셔너리에 저장됩니다. 

 


 

10. 함수의 리턴값은 항상 하나이다.

 
def add_n_mul(a, b):
    return a + b, a * b

 

위 경우 리턴값은 a + b일까요? 아니면 a * b일까요?

 

result = add_n_mul(3, 4)
print(result)

 

 

result는 (7, 12)라는 튜플값을 가지게 됩니다.

 

1개의 튜플값을 2개의 값으로 분리하고 싶으면 함수를 호출하는 방법을 바꾸면 됩니다.

 

result1, result2 = add_n_mul(3, 4)
print(result1)
print(result2)

 

 
(7, 12)라는튜플값이 각각 7과 12로 분리된 모습입니다.

 


 

11. return은 하나만 실행된다.

 
def add_n_mul(a, b):
    return a + b
    return a * b

 

위 경우 리턴값은 a + b일까요? 아니면 a * b일까요?

 

 

리턴값은 a + b입니다.

첫 번째 return인 a + b는 실행되었지만, 두 번째 return인 a * b는 실행되지 않았습니다.

 

함수는 return을 만나는 순간 리턴값을 돌려준 다음 함수를 빠져나가게 됩니다.

 


 

12. return으로 함수 즉시 종료하기

 

def say_name(name):
    if name == "파에톤":
        return
    print("나의 이름은 %s입니다." %name)

 

위 함수는 name에 입력값으로 '파에톤'을 받으면 문자열을 출력하지 않고 함수를 빠져나갑니다.

print(say_name('미야비'))
print(say_name('파에톤'))

 

 

리턴값이 없는 함수에서 return으로 함수를 빠져나가는 방법은 자주 사용되는 방법입니다.

 


 

13. 매개변수의 초기값 설정

 
def say_myself(name, age, man=True):
    print("나의 이름은 %s입니다." %name)
    print("나이는 %d살입니다." %age)
    if man:
        print("남자입니다.")
    else:
        print("여자입니다.")

 

위 say_myself함수는 이름, 나이, 성별에 대한 문자열을 출력하는 함수입니다.

특히, 성별에 대해 man = True처럼 매개변수에 미리 초기값을 설정했습니다.

 

say_myself("파에톤", 23, True)
say_myself("미야비", 24, False)

 

 
단, man = True처럼 초기값을 설정하고 싶은 매개변수는 함수의 괄호에서 항상 제일 뒤쪽에 위치해야 합니다.
 

 

14. 함수 안에서 변수의 유효 범위

 
a = 1
def var_test(a):
    a = a + 1

var_test(a)
print(a)

 

위 경우, print(a)의 값은 1일까요? 2일까요?

 

 

1이 출력되었습니다.

 

함수 안에서 사용하는 매개변수 a는 함수 안에서만 사용할 수 있는 '함수만의 변수'이기 때문입니다.

즉, 함수 밖의 변수 a와 함수의 매개변수 a는 상관이 없습니다.

 


 

15. 함수 밖의 변수를 함수 안의 변수로 변경하는 방법

 

함수 밖의 변수를 함수 안의 변수로 변경하는 방법은 2가지가 있습니다.

 

  return을 사용한 방법

 

 
a = 1
def var_test(a):
    return a + 1

a = var_test(a)
print(a)

 

이 경우 함수 밖의 a와 함수 안의 a는 다른 변수입니다.

 

 

return을 사용한 결과, a의 값이 증가한 것을 확인할 수 있습니다.

 


 

  global을 사용하는 방법

 

a = 1
def var_test():
    global a
    a = a + 1

var_test()
print(a)

 

 

global명령어를 사용해도 a의 값이 증가한 것을 확인할 수 있습니다.

 

하지만,

global명령어는 프로그래밍을 할 때 지양하는 편이 좋다고 합니다.

함수는 독립적으로 존재하는 것이 좋기 때문입니다.

외부 변속에 종속적인 함수는 좋은 함수가 아니라고 합니다.

 


 

16. lambda 함수

 
lambda는 함수를 간결하게 만들 때 사용하는 예약어입니다.
 
add = lambda a, b: a + b
print(add(34, 81))

 

 

def를 사용할 때보다 간결하게 함수를 만들 수 있으며, 결과는 동일하게 출력됩니다.

 

 

lambda명령의 기본 골격을 정리하면 아래와 같습니다.

lambda 매개변수: 표현식

 


 

17. 마무리

 

우선, 함수는 입력값을 특정 결과값으로 변환&전환하는 도구입니다.

그렇기 때문에 함수는 코드 재사용성과 가독성을 높이는 핵심 문법입니다.

 

읽어주셔서 감사합니다.