[Python] 파이썬 함수

·2025년 6월 27일

Python

목록 보기
27/33

파이썬 함수의 필요성

함수는 프로그래밍에서 매우 중요한 개념

  • 1. 코드의 재사용성

    동일한 기능을 여러 번 사용할 경우, 함수를 사용하면 중복을 줄이고 유지보수를 쉽게 할 수 있음

  • 2. 코드의 가독성

    함수를 사용하면 코드의 구조가 명확해지고, 각 부분이 어떤 역할을 하는지 쉽게 이해 가능

  • 3. 유지보수의 용이성

    함수를 사용하면 특정 기능을 수정할 때 한 곳만 수정하면 되므로, 버그를 줄이고 유지보수가 편리해짐


파이썬 함수 문법

def 함수이름(매개변수1, 매개변수2, ...):
    """문서화 문자열 (함수 설명)"""
    실행할 코드
    return 반환값

문법 설명

  • def 키워드를 사용하여 함수 정의
  • 함수 이름 뒤에 괄호 ()를 사용하며, 필요한 경우 매개변수를 전달할 수 있음
  • return 문을 사용하여 결과값을 반환할 수 있으며, 반환값이 없을 수도 있음

💡 참고: 오라클의 sum 함수도 return 절이 있기 때문에 항상 결과를 리턴해줌

SELECT SUM(sal)
FROM emp
WHERE 1 = 2;

✔️ 예제1. 함수 사용 전후 비교

함수를 사용하지 않았을 때

a = int(input('숫자를 입력하세요 ~ '))

if a % 2 == 0:
    print('짝수 입니다.')
else:
    print('홀수 입니다.')

함수를 사용했을 때

def check_odd_even(x):
    if x % 2 == 0:
        print('짝수 입니다.')
    else:
        print('홀수 입니다.')
        
check_odd_even(2)	# 짝수 입니다.

문제1. 양수/음수 판별 함수

숫자를 물어보게 하고 숫자를 입력하면 해당 숫자가 양수인지 음수인지 출력되게 하시오

def check_plus_minus():
    num = int(input('숫자를 입력하세요 ~ '))
    if num > 0:
        print('양수입니다.')
    elif num < 0:
        print('음수입니다.')
    else:
        print('0 입니다.')
        
check_plus_minus()

✔️ 예제2. 매개변수가 있는 함수

숫자를 입력해서 함수를 실행하면 짝수인지 홀수인지가 출력되는 함수를 생성하시오
ㄴ 예제1과 같음


✔️ 예제3. return 절을 사용해야 하는 경우

1. 함수의 결과값을 변수에 저장하고 싶을 때

return사용

def check_odd_even(num):
    if num % 2 == 0:
        return '짝수 입니다'    # 함수의 결과를 변수에 저장하고 싶을 때 return 사용
    else:
        return '홀수 입니다'
        
result = check_odd_even(7)  # 함수의 결과를 변수에 저장
print(result)

2. 함수를 다른 함수 내에서 호출하고 싶을 때

# 짝수와 홀수를 판정하는 함수
def check_odd_even(num):
    if num % 2 == 0:
        return '짝수'
    else:
        return '홀수'
    
# 숫자를 여러개 받아서 짝수와 홀수를 판정하는 함수
def process_numbers(num_list):
    for num in num_list:
        result = check_odd_even(num)
        print(num, '은 ', result, '입니다')

process_numbers([1,2,3,4,5])


# 1 은  홀수 입니다
# 2 은  짝수 입니다
# 3 은  홀수 입니다
# 4 은  짝수 입니다
# 5 은  홀수 입니다

양수와 음수를 출력하는 함수를 다음과 같이 만드시오

plus_minus_numbers 라는 함수를 만드는데
여러 개의 숫자들을 받아서 양수인지 음수인지 0인지를 출력

def check_plus_minus(num):
    if num > 0:
        return '양수'
    elif num < 0:
        return '음수'
    else:
        return 0
    
def plus_minus_numbers(num_list):
    for num in num_list:
        result = check_plus_minus(num)
        print(num, '은 ', result, '입니다')

plus_minus_numbers([-4, 7, -2, 0, 5])

# 결과:
# -4는 음수입니다.
# 7은 양수입니다.
# -2는 음수입니다.
# 0는 0입니다.
# 5는 양수입니다.

문제1. 숫자 비교 함수

다음의 결과를 실행하는 함수를 생성하시오

def compare_numbers(num1, num2):
    if num1 > num2:
        return '첫번째 숫자가 더 큽니다.'
    elif num1 < num2:
        return '두번째 숫자가 더 큽니다'
    else:
        return '두 숫자는 같습니다'
    
result = compare_numbers(2, 7)
print(result)

문제2. 평균 계산 함수

학생 성적의 평균을 계산하는 함수를 구현하세요

def calculate_average(num_list):
    total = sum(num_list)
    avg = total / len(num_list)
    return avg

# 학생들의 점수 리스트
student1_scores = [85, 90, 78]
student2_scores = [65, 70, 58]
student3_scores = [92, 88, 95, 91]

# 각 학생들의 평균 계산
student1_avg = calculate_average(student1_scores)
student2_avg = calculate_average(student2_scores)
student3_avg = calculate_average(student3_scores)

# 결과 출력
print(f"학생1의 평균: {round(student1_avg, 1)}")  # 학생1의 평균: 84.3
print(f"학생2의 평균: {round(student2_avg, 1)}")  # 학생2의 평균: 64.3
print(f"학생3의 평균: {student3_avg}")  # 학생3의 평균: 91.5

✔️ 함수의 필요성 상세 예제

1. 코드의 재사용성

함수 사용 전:

num1 = 3
num2 = 5
num3 = 7

square1 = num1 ** 2
square2 = num2 ** 2
square3 = num3 ** 2

print(square1)  # 9
print(square2)  # 25
print(square3)  # 49

함수 사용 후:

def square(num):
    return num ** 2

print(square(3))
print(square(5))
print(square(7))

2. 코드의 가독성 향상

함수를 사용하지 않았을 때:

length1 = 5
width1 = 10
area1 = length1 * width1
print(f"첫번째 직사각형의 넓이: {area1}")

length2 = 8
width2 = 11
area2 = length2 * width2
print(f"두번째 직사각형의 넓이: {area2}")

함수를 사용했을 때:

def rectangle(x, y):
    return x * y

print('첫번째 직사각형의 넓이: ', rectangle(5, 10))
print('두번째 직사각형의 넓이: ', rectangle(8, 11))

3. 유지보수 향상

함수 사용 전:

radius1 = 4
circle_area1 = 3.14 * radius1 * radius1
print(f"첫번째 원의 넓이: {circle_area1}")

radius2 = 7
circle_area2 = 3.14 * radius2 * radius2
print(f"두번째 원의 넓이: {circle_area2}")

# ... 이런 코드가 100개가 있다면?

위와 같은 코드가 100개 있으면 π(3.14)를 수정할 때 하나하나 찾아서 전부 수정해줘야 함

함수 사용 후:

def circle_area(r):
    return 3.14 * r * r

print('첫번째 원의 넓이: ', circle_area(4))
print('두번째 원의 넓이: ', circle_area(7))

문제1. 원의 넓이와 둘레 구하는 함수

다음 요구사항에 맞게 함수를 구현하세요

  • 원의 넓이 함수이름: circle_area
  • 원의 둘레 함수이름: circle_circumference
  • 둘레 구하는 공식: 2 × π × 반지름
  • π는 3.1415로 설정
def circle_area(num):
    return num * num * 3.1415

def circle_circumference(num):
    return 2 * 3.1415 * num

print("반지름이 5인 원")
print(f"넓이: {circle_area(5)}")          # 넓이: 78.5375
print(f"둘레: {circle_circumference(5)}")  # 둘레: 31.415

print("반지름이 7.5인 원")
print(f"넓이: {circle_area(7.5)}")          # 넓이: 176.71875
print(f"둘레: {circle_circumference(7.5)}")  # 둘레: 47.1225

전역변수 활용

3.14 -> 3.14159265359로 변경된다면
원과 관련된 계산을 하는 함수들을 모두 찾아서 변경 해줘야 하는 불편함이 생겨 유지보수 어려워짐

그래서 다음과 같이 "전역변수"를 사용해야 함

# 전역변수 설정
pi = 3.1415		# 나중에 원주율이 변경될 일이 생기면 여기서 변경해주면 됨

def circle_area(num):
    return num * num * pi

def circle_circumference(num):
    return 2 * pi * num

print("반지름이 5인 원")
print(f"넓이: {circle_area(5)}")          # 넓이: 78.5375
print(f"둘레: {circle_circumference(5)}")  # 둘레: 31.415

print("반지름이 7.5인 원")
print(f"넓이: {circle_area(7.5)}")          # 넓이: 176.71875
print(f"둘레: {circle_circumference(7.5)}")  # 둘레: 47.1225

이제 π 값 변경하고 싶을 때
전역변수 pi 값만 변경하면 모든 함수에 자동 반영됨


🔸핵심 정리

함수의 3가지 핵심 장점

  1. 코드의 재사용성: 동일한 코드를 반복 작성할 필요 없음
  2. 코드의 가독성: 코드 구조가 명확해지고 이해하기 쉬움
  3. 유지보수의 용이성: 한 곳만 수정하면 모든 곳에 반영

함수 작성 시 고려사항

  1. 매개변수: 함수에 전달할 값이 있는지 확인
  2. 반환값: 함수의 결과를 다른 곳에서 사용할지 확인
  3. 전역변수: 여러 함수에서 공통으로 사용하는 값이 있는지 확인

언제 return을 사용할까?

  • 함수의 결과값을 변수에 저장하고 싶을 때
  • 함수의 결과를 다른 함수의 입력으로 사용할 때
  • 계산된 값을 함수 외부로 전달해야 할 때
  • 함수의 호출 결과를 다른 함수에 전달해야 할 때

0개의 댓글