함수 (Functions)
2025. 3. 26. 02:42ㆍProgramming Languages/Python
함수(Functions)
1. 함수란 무엇인가?
함수는 특정 작업을 수행하는 코드 블록으로, 프로그램에서 반복적으로 사용할 수 있습니다. 함수를 사용하면 코드의 재사용성이 높아지고, 프로그램의 구조가 명확해집니다.
함수의 주요 장점:
- 코드 재사용: 동일한 코드를 여러 번 작성할 필요가 없음
- 모듈화: 프로그램을 논리적 단위로 분할
- 가독성 향상: 코드의 목적을 명확하게 표현
- 유지보수 용이: 수정이 필요할 때 한 곳만 변경하면 됨
2. 함수 정의와 호출
함수 정의 방법
def 함수이름(매개변수1, 매개변수2, ...):
"""함수에 대한 설명 (독스트링)"""
# 실행할 코드
return 반환값 # 선택 사항
간단한 함수 예제
def 인사하기():
"""인사말을 출력하는 간단한 함수"""
print("안녕하세요!")
# 함수 호출
인사하기() # 출력: 안녕하세요!
매개변수가 있는 함수
def 이름으로_인사하기(이름):
"""이름을 받아 개인화된 인사말을 출력하는 함수"""
print(f"안녕하세요, {이름}님!")
# 함수 호출
이름으로_인사하기("철수") # 출력: 안녕하세요, 철수님!
반환값이 있는 함수
def 합계(a, b):
"""두 수의 합을 반환하는 함수"""
return a + b
# 함수 호출과 반환값 사용
결과 = 합계(5, 3)
print(결과) # 출력: 8
3. 매개변수(Parameters)와 인수(Arguments)
위치 인수(Positional Arguments)
인수의 위치에 따라 매개변수에 할당됩니다.
def 정보_출력(이름, 나이, 직업):
print(f"이름: {이름}, 나이: {나이}, 직업: {직업}")
정보_출력("김철수", 25, "개발자") # 출력: 이름: 김철수, 나이: 25, 직업: 개발자
키워드 인수(Keyword Arguments)
매개변수 이름을 명시적으로 지정하여 인수를 전달합니다.
정보_출력(나이=25, 직업="개발자", 이름="김철수") # 출력: 이름: 김철수, 나이: 25, 직업: 개발자
기본값 매개변수(Default Parameters)
매개변수에 기본값을 설정할 수 있습니다.
def 인사말(이름, 인사="안녕하세요"):
print(f"{인사}, {이름}님!")
인사말("철수") # 출력: 안녕하세요, 철수님!
인사말("영희", "반갑습니다") # 출력: 반갑습니다, 영희님!
가변 인수(*args)
임의 개수의 위치 인수를 튜플로 받습니다.
def 합계_계산(*숫자들):
"""여러 숫자의 합을 계산하는 함수"""
print(f"숫자들: {숫자들}, 타입: {type(숫자들)}")
합계 = 0
for 숫자 in 숫자들:
합계 += 숫자
return 합계
print(합계_계산(1, 2, 3, 4, 5)) # 출력: 15
키워드 가변 인수(**kwargs)
임의 개수의 키워드 인수를 딕셔너리로 받습니다.
def 개인정보(**정보):
"""사람의 정보를 출력하는 함수"""
print(f"정보: {정보}, 타입: {type(정보)}")
for 키, 값 in 정보.items():
print(f"{키}: {값}")
개인정보(이름="김철수", 나이=25, 직업="개발자", 취미="독서")
4. 함수의 반환값
단일 값 반환
def 제곱(숫자):
"""숫자의 제곱을 반환하는 함수"""
return 숫자 ** 2
결과 = 제곱(4)
print(결과) # 출력: 16
여러 값 반환
함수는 튜플을 사용하여 여러 값을 반환할 수 있습니다.
def 사칙연산(a, b):
"""두 숫자의 사칙연산 결과를 반환하는 함수"""
덧셈 = a + b
뺄셈 = a - b
곱셈 = a * b
나눗셈 = a / b if b != 0 else "나눗셈 불가"
return 덧셈, 뺄셈, 곱셈, 나눗셈
결과 = 사칙연산(10, 2)
print(결과) # 출력: (12, 8, 20, 5.0)
# 언패킹을 사용하여 값을 개별 변수에 할당
덧셈, 뺄셈, 곱셈, 나눗셈 = 사칙연산(10, 2)
print(f"덧셈: {덧셈}, 뺄셈: {뺄셈}, 곱셈: {곱셈}, 나눗셈: {나눗셈}")
return 없는 함수
함수에 return 문이 없으면 None을 반환합니다.
def 인사_출력(이름):
"""인사말만 출력하고 반환값이 없는 함수"""
print(f"안녕하세요, {이름}님!")
결과 = 인사_출력("철수")
print(결과) # 출력: None
5. 함수의 범위(Scope)와 변수 수명
지역 변수(Local Variables)
함수 내에서 정의된 변수는 함수 외부에서 접근할 수 없습니다.
def 함수():
지역변수 = "함수 내부에서만 접근 가능"
print(지역변수)
함수() # 출력: 함수 내부에서만 접근 가능
# print(지역변수) # 오류 발생: 지역변수는 정의되지 않음
전역 변수(Global Variables)
함수 외부에서 정의된 변수로, 함수 내에서도 접근(읽기)할 수 있습니다.
전역변수 = "함수 외부에서 정의됨"
def 함수():
print(전역변수) # 전역 변수 읽기
함수() # 출력: 함수 외부에서 정의됨
global 키워드
함수 내에서 전역 변수를 수정하려면 global 키워드를 사용합니다.
카운터 = 0
def 카운터_증가():
global 카운터 # 전역 변수를 수정하기 위해 global 키워드 사용
카운터 += 1
print(f"현재 카운터: {카운터}")
카운터_증가() # 출력: 현재 카운터: 1
카운터_증가() # 출력: 현재 카운터: 2
nonlocal 키워드
중첩 함수에서 외부 함수의 변수를 수정할 때 사용합니다.
def 외부함수():
외부변수 = 10
def 내부함수():
nonlocal 외부변수 # 외부 함수의 변수를 수정하기 위해 nonlocal 키워드 사용
외부변수 += 5
print(f"내부함수에서 수정된 값: {외부변수}")
내부함수()
print(f"외부함수에서의 값: {외부변수}")
외부함수()
# 출력:
# 내부함수에서 수정된 값: 15
# 외부함수에서의 값: 15
'Programming Languages > Python' 카테고리의 다른 글
| 재귀 함수(Recursive Functions) (0) | 2025.03.26 |
|---|---|
| 람다 함수(Lambda Functions) (0) | 2025.03.26 |
| collections 모듈의 특수 컬렉션 (0) | 2025.03.26 |
| 집합 (Sets) (1) | 2025.03.26 |
| 딕셔너리 (Dictionaries) (1) | 2025.03.26 |