[Python] 함수 - def, docstring, 호출 방식, 반환값, 중첩 함수
by 우와한개발자
1. 함수란?
- 어떤 값을 입력받아 다른 값을 출력하도록 미리 만들어져 있는것
- 인자는 없어도됨
def 함수명(인자1, 인자2, ...):
실행할 구문
return 반환값 # 생략 가능, 생략시 None 반환
- 인자는 없어도 됨
⚠️ 쉼표(,)가 튜플을 만드는 것이지, 괄호가 튜플을 만드는 게 아님.
- return 10, 20 은 return (10, 20) 과 동일
2. docstring
- 함수의 설명서
- 함수 본문의 첫번째 문장에 작성
- 한 줄인경우 " 또는 '
- 여러줄인경우 """ 또는 ''' 사용
- 첫 라인을 제외하고 들여쓰기 하지 않아도 됨
def my_function():
""" docstring은
함수 첫 라인에 작성합니다"""
- help(함수명) 또는 함수명.__doc__ 으로 확인 가능
def add(a, b):
"""두 수를 더한 값을 반환합니다."""
return a + b
print(add.__doc__) # 두 수를 더한 값을 반환합니다.
3. 함수 네이밍 규칙
- 함수명은 스네이크 케이스(snake_case) 로 작성하는 것이 원칙
| 경우 | 표기법 | 예시 |
| 일반 함수 | snake_case | get_triangle() |
| 사람 이름, 알고리즘 등 고유명사 | CamelCase | BubbleSort(), KMeans() |
4. 함수 호출
1) 값에 의한 호출
- 파이썬에서 모든 데이터는 객체이지만 함수 안에서 할당연산자(=)로 변수를 변경하는 경우 함수 밖의 변수에 영향을 주지 않음.
- 즉, 지역 변수는 전역변수에 영향을 주지 않음
a = 100
def func(x):
x = 200
print(x)
func(a) #200
print(a) #100
2) 참조에 의한 호출
- 리스트 등의 경우는 함수 안에서 참조연산자(.)로 객체를 변경하는 경우 내부 값은 바뀜
list =[1,2,3]
def func2(x):
x.append(4)
func2(list)
print(list) #[1, 2, 3, 4]
5. 함수 이름 변경
- 변수에 함수 자체를 할당하면 새로운 이름이 생기는 것과 같음
x=100
def my_func():
print("hi")
# 함수 객체 자체를 변수에 할당한 것. 아직 실행되지 않음
myfunc2 = my_func
# 함수를 즉시 실행한 뒤, 그 반환값을 변수에 할당한 것
# 이 함수는 return이 없으므로 myfunc3에는 None이 저장됨
myfunc3 = my_func()
6. 함수 반환
- return이 없으면 자동으로 None을 반환.
- return 값이 여러 개인 경우 튜플로 반환됨
# 1개 → 그냥 그 값 그대로 반환
def func1():
return 10
print(type(func1())) # <class 'int'>
# 여러 개 → 튜플로 반환
def func2():
return 10, 20
print(type(func2())) # <class 'tuple'>
# 없음 → None 반환
def func3():
pass
print(type(func3())) # <class 'NoneType'>
# 명시적으로 튜플로 반환
def func4():
return (10,) # 1개짜리 튜플을 반환하고 싶으면 쉼표 필요
print(type(func4())) # <class 'tuple'>
1) 함수 객체 자체를 반환 (함수형 API)
def outer(num):
def inner(num):
print(num)
return inner
outer(10)(5) #가능 :함수형 API
2) 중첩 함수에서 탈출 (nonlocal)
- 중첩 함수에서 바깥 함수의 변수를 변경하려면 nonlocal 키워드 사용
- nonlocal 없이 바깥 변수를 수정하면 새로운 지역변수로 처리됨
- 자바처럼 label 없음.
def outer():
count = 0
def inner():
nonlocal count # 바깥 변수 참조 선언
count += 1
print(count)
return inner
f = outer()
f() # 1
f() # 2
f() # 3
- nonlocal vs global 비교
| 키워드 | 범위 |
| nonlocal | 바로 바깥 함수의 변수 |
| global | 파일 전체(전역) 변수 |
'언어 > Python' 카테고리의 다른 글
| [Python] 언더스코어(_) 정리 - 단일, private, name mangling, dunder (0) | 2026.04.15 |
|---|---|
| [Python] VSCode 시작하기 - 가상환경(.venv) 설정과 프로젝트 실행 (0) | 2026.04.15 |
| [Python] 조건문 - if~elif~else / match~case (0) | 2026.03.09 |
| [Python] enumerate와 comprehension - 반복문 인덱스 추출 / 한줄 반복문 (0) | 2026.03.08 |
| [Python] 셋(set)이란? set의 특징과 주요 함수 (0) | 2026.03.08 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자