def 함수 정의, 매개변수, return값, 기본값 인수, *args/**kwargs
이번 강에서 배울 것
- 함수(Function)의 개념과 필요성
- def로 함수 정의하고 호출하기
- 매개변수(Parameter)와 인수(Argument)
- return 값과 None
- 기본값 인수, *args, **kwargs
- 변수 범위(Scope) — 지역 변수 vs 전역 변수
1. 함수란 무엇인가
함수(Function)는 특정 작업을 수행하는 코드 블록으로, 이름을 붙여 재사용할 수 있습니다. 같은 코드를 여러 번 작성하지 않고 함수로 만들어두면 한 번 정의 후 여러 곳에서 호출할 수 있습니다.
# 함수 없이 반복 코드 (나쁜 예)
print("=" * 20)
print(" 환영합니다!")
print("=" * 20)
# ... 다른 코드 ...
print("=" * 20)
print(" 감사합니다!")
print("=" * 20)
# 함수로 만들면 (좋은 예)
def print_box(message):
print("=" * 20)
print(f" {message}")
print("=" * 20)
print_box("환영합니다!")
# ... 다른 코드 ...
print_box("감사합니다!")
2. 함수 정의와 호출
# 함수 정의 (define): def 키워드 사용
def say_hello():
"""인사를 출력하는 함수""" # Docstring: 함수 설명
print("안녕하세요!")
print("파이썬을 배우고 있습니다.")
# 함수 호출 (call): 함수명 + ()
say_hello() # → 안녕하세요! / 파이썬을 배우고 있습니다.
say_hello() # 여러 번 호출 가능
say_hello() # 코드 중복 없이 재사용
# 매개변수(parameter) 있는 함수
def greet(name): # name = 매개변수 (함수 정의 시)
print(f"안녕하세요, {name}님!")
greet("민준") # "민준" = 인수 (함수 호출 시)
greet("수진")
greet("철수")
# → 안녕하세요, 민준님!
# → 안녕하세요, 수진님!
# → 안녕하세요, 철수님!
3. return — 결과값 반환
# return: 함수가 계산 결과를 호출한 곳으로 돌려줌
def add(a, b):
result = a + b
return result # 결과 반환
sum_value = add(3, 5) # 반환값을 변수에 저장
print(sum_value) # → 8
print(add(10, 20)) # → 30
print(add(7, 3) * 2) # → 20 (반환값으로 바로 계산 가능)
# return이 없으면 None 반환
def no_return():
print("나는 아무것도 반환하지 않아요")
result = no_return()
print(result) # → None
# 여러 값 반환 (튜플로 묶여 반환)
def divide(a, b):
quotient = a // b # 몫
remainder = a % b # 나머지
return quotient, remainder
q, r = divide(17, 5)
print(f"몫: {q}, 나머지: {r}") # → 몫: 3, 나머지: 2
# return은 함수를 즉시 종료시킴
def check_positive(n):
if n <= 0:
return "양수가 아닙니다" # 여기서 함수 종료
return f"{n}은 양수입니다" # n > 0일 때만 실행
print(check_positive(-5)) # → 양수가 아닙니다
print(check_positive(10)) # → 10은 양수입니다
4. 기본값 인수(Default Parameter)
# 매개변수에 기본값을 지정하면 인수 생략 가능
def greet(name, language="한국어"):
if language == "한국어":
print(f"안녕하세요, {name}님!")
elif language == "영어":
print(f"Hello, {name}!")
elif language == "일본어":
print(f"こんにちは、{name}さん!")
greet("민준") # 기본값 사용 → 안녕하세요, 민준님!
greet("James", "영어") # 기본값 덮어씀 → Hello, James!
greet("佐藤", "일본어") # → こんにちは、佐藤さん!
# 기본값 인수는 반드시 일반 인수 뒤에 배치
# ❌ def func(a=1, b): pass # SyntaxError
# ✅ def func(a, b=1): pass # 올바름
# 키워드 인수로 순서 무관하게 전달
def create_profile(name, age, city):
print(f"{name} / {age}세 / {city}")
create_profile(age=28, city="서울", name="김민준")
# → 김민준 / 28세 / 서울
5. *args와 **kwargs
# *args: 개수 불명의 위치 인수를 튜플로 받음
def sum_all(*args):
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2)) # → 3
print(sum_all(1, 2, 3, 4, 5)) # → 15
print(sum_all(10, 20, 30, 40)) # → 100
# **kwargs: 개수 불명의 키워드 인수를 딕셔너리로 받음
def print_info(**kwargs):
for key, value in kwargs.items():
print(f" {key}: {value}")
print_info(name="김민준", age=28, city="서울")
# → name: 김민준
# → age: 28
# → city: 서울
# 혼합 사용
def mixed(a, b, *args, **kwargs):
print(f"a={a}, b={b}")
print(f"args={args}")
print(f"kwargs={kwargs}")
mixed(1, 2, 3, 4, x=10, y=20)
# → a=1, b=2
# → args=(3, 4)
# → kwargs={'x': 10, 'y': 20}
6. 변수 범위(Scope)
# 지역 변수 (Local): 함수 안에서 만든 변수 → 함수 밖에서 접근 불가
def my_func():
local_var = "나는 지역 변수"
print(local_var)
my_func()
# print(local_var) # NameError: 함수 밖에서 접근 불가!
# 전역 변수 (Global): 함수 밖에서 만든 변수 → 어디서든 읽기 가능
global_var = "나는 전역 변수"
def read_global():
print(global_var) # 전역 변수 읽기 가능
read_global() # → 나는 전역 변수
# 함수 안에서 전역 변수 수정: global 키워드 필요
count = 0
def increment():
global count # global 선언 필요
count += 1
increment()
increment()
print(count) # → 2
# 권장: global 사용을 최소화하고 return으로 값을 주고받을 것
6강 핵심 요약
- def로 함수 정의, 함수명()으로 호출
- return: 결과를 반환, return 없으면 None 반환
- 여러 값 반환 가능 — 튜플로 묶여 반환됨
- 기본값 인수: 인수 생략 시 기본값 사용 (일반 인수 뒤에 배치)
- *args: 가변 위치 인수(튜플), **kwargs: 가변 키워드 인수(딕셔너리)
- 지역 변수는 함수 내부에서만 유효, 전역 변수 수정 시 global 선언
- 다음 강: 리스트와 튜플 — 파이썬의 핵심 자료구조
관련 검색어 · 파이썬함수, def파이썬, return파이썬, 기본값인수, args kwargs, 파이썬스코프, 지역변수전역변수