본문 바로가기
파이썬/기초 학습

Day 7: 함수 추가학습

by CBROJIN 2025. 8. 2.

1) 학습 요약표

항목 설명
함수 정의 def + 함수명 + 괄호 + 콜론으로 정의
매개변수/인자 함수 정의 시 매개변수, 호출 시 인자 전달
반환값 return 키워드로 반환, 여러 값은 튜플 형태
*args 위치 인자를 튜플로 처리
**kwargs 키워드 인자를 딕셔너리로 처리
전역/지역 변수 함수 외부는 전역, 내부는 지역. 수정 시 global 필요
함수 종료 return은 함수 종료 및 값 반환

 

2) 이론 학습

1. 함수란?

  • 함수를 사용하면 같은 작업을 반복해서 작성할 필요가 없습니다.
  • 마치 자판기처럼, 입력(동전)을 넣으면 출력(음료)이 나오는 구조입니다.
  • def 키워드로 정의하고, return으로 값을 돌려줄 수 있습니다.
# 숫자 3을 더하는 함수 예제
def plus(num):
    return num + 3

result = plus(5)
print(result)  # 출력: 8
 

2. 함수 정의와 호출 구조

함수는 def 키워드로 시작하고, 이름과 괄호, 콜론으로 구성됩니다. 호출 시에는 함수이름() 형식으로 실행합니다.

  • 함수 이름은 의미 있게 작성해야 합니다.
  • 괄호 안에는 입력값(매개변수)을 받을 수 있으며, 필요 없을 경우 비워도 됩니다.
# 인사말 출력 함수
def say_hello(name):
    return f"안녕하세요, {name}님!"

print(say_hello("지민"))
 

3. 매개변수와 인자

매개변수(parameter): 함수 정의 시 사용하는 변수

인자(argument): 함수 호출 시 전달하는 값

  • 매개변수는 함수 내부에서 사용할 변수입니다.
  • 인자는 실제로 함수에 전달하는 값입니다.
  • 인자의 개수는 매개변수와 일치해야 합니다.
# 제곱을 반환하는 함수
def square(num):
    return num ** 2

print(square(5))  # 출력: 25
 

4. print()와 return의 차이

  • print()는 단순히 결과를 화면에 출력하지만 값을 반환하지 않습니다.
  • return은 계산된 값을 함수 외부로 반환하여 이후 다른 연산에도 사용할 수 있습니다.
# print() 사용
def show_total(a, b):
    print(a + b)

res = show_total(3, 4)
print("반환값:", res)  # 출력: 반환값: None
# return 사용
def get_total(a, b):
    return a + b

res = get_total(3, 4)
print("반환값:", res)  # 출력: 반환값: 7
 

5. 함수 사용 형태 (입출력 유무)

함수는 매개변수와 반환값의 유무에 따라 4가지 형태로 나뉩니다.

# 1. 매개변수 X, 반환값 X
def guide():
    print("두 정수를 입력받아 곱한 결과를 출력하는 프로그램입니다.")

# 2. 매개변수 X, 반환값 O
def inputnums():
    a = int(input("첫번째 정수를 입력하세요:"))
    b = int(input("두번째 정수를 입력하세요:"))
    return a, b

# 3. 매개변수 O, 반환값 O
def multi(num1, num2):
    return num1 * num2

# 4. 매개변수 O, 반환값 X
def printResult(result):
    print("두 수의 곱셈 결과는 %d입니다." % result)

# 실행 흐름
guide()
n1, n2 = inputnums()
res = multi(n1, n2)
printResult(res)
 

6. 다양한 인자 사용 방법

기본값 인자, 키워드 인자

  • 기본값 인자를 사용하면 입력이 생략되었을 때 기본값을 사용할 수 있습니다.
  • 키워드 인자는 매개변수의 순서를 바꿔도 명시적으로 연결됩니다.
# 기본값 인자
def greet(name="사용자"):
    print(f"안녕하세요, {name}님!")

greet("유진")
greet()

# 키워드 인자
def info(name, age):
    print(f"{name}님은 {age}세입니다.")

info("영수", 30)
info(age=27, name="은정")
 

7. 가변 인자 (*args)

  • 인자의 개수가 유동적인 경우 *args를 사용합니다.
  • 전달된 인자들은 튜플 형태로 처리됩니다.
# 여러 개의 값을 더하는 함수
def add_all(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

print(add_all(1, 2, 3))       # 6
print(add_all(10, 20, 30, 5)) # 65
 

8. 키워드 가변 인자 (**kwargs)

  • 이름이 붙은 인자들을 딕셔너리로 받아 처리합니다.
  • key=value 형식으로 넘깁니다.
# 딕셔너리 형태로 키-값 쌍을 받아 처리
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="혜진", age=29, job="개발자")
 

9. 일반 인자 + *args + **kwargs 혼합 사용

  • 이 조합은 함수가 다양한 형태의 인자를 받을 수 있게 합니다.
# 세 가지 형태 혼합
def demo_function(x, *args, **kwargs):
    print("일반 인자:", x)
    print("가변 위치 인자:", args)
    print("가변 키워드 인자:", kwargs)

demo_function(100, 1, 2, 3, name="철수", age=25)

#함수 매개변수 순서 규칙 (공식 문서 기준, PEP 3102 등):

파이썬 함수에서 인자(parameter)는 다음 순서대로만 정의 가능.

  1. 일반 위치 인자 (예: x)
  2. 가변 위치 인자 (*args)
  3. 키워드 전용 인자 (*, a=1) → 생략 가능
  4. 가변 키워드 인자 (**kwargs)

이 순서를 지키지 않으면 SyntaxError가 발생.

10. 반환값과 자료형

  • 여러 값을 return하면 튜플로 반환됩니다.
  • 리스트나 딕셔너리로도 묶어서 반환할 수 있습니다.
# 여러 값을 반환 → 튜플 형태
def calculator(a, b):
    return a + b, a - b, a * b, a / b

reslist = calculator(10, 2)
print(reslist, type(reslist))
 

11. return은 함수 종료 역할도 함

  • return은 값을 반환함과 동시에 함수 실행을 종료시킵니다.
  • 조건문 등과 함께 조기 종료에 사용됩니다.
# 0으로 나누는 경우 함수 조기 종료
def division(a, b):
    if b == 0:
        return
    return a / b

print(division(10, 3))  # 3.33...
print(division(10, 0))  # None
 

12. 전역변수와 지역변수

  • 함수 내에서 만든 변수는 지역변수이며, 함수 바깥에서는 접근할 수 없습니다.
  • 전역변수는 프로그램 전체에서 접근 가능합니다.
num = 3  # 전역 변수 num 선언

def plusThree(num):
    num += 3
    print("함수 내 num:", num)

plusThree(num)
print("전역 num:", num)

# 리스트 수정 예제
globallist = []

def appendValue():
    globallist.append(100)

appendValue()
print(globallist)
 

13. 전역변수 수정 (global 키워드)

  • 함수 안에서 전역변수를 수정하려면 global 키워드를 사용해야 합니다.
  • 다만, 가능한 한 전역변수 수정은 피하고, 함수는 인자와 반환값만 사용하여 처리하는 것이 좋습니다.
num = 1

def plusNum():
    global num
    num += 1

plusNum()
print(num)
 

3) 종합 문제

1. 섭씨 → 화씨 변환 함수

문제 설명 : 섭씨 온도를 입력받아 화씨(Fahrenheit)로 변환하여 반환하는 함수를 작성하세요.

수식은 다음과 같습니다:

Fahrenheit = Celsius × 1.8 + 32

 

2. 과목 점수 평균 및 등급 계산

문제 설명 : 여러 과목 점수를 *args로 입력받아 평균을 구하고, 평균 점수에 따라 등급(A, B, C, F)을 반환하세요.

등급 기준

  • 90점 이상: A
  • 80점 이상: B
  • 70점 이상: C
  • 그 외: F

3. 회원 정보 딕셔너리 출력

문제 설명 : 이름, 나이, 연락처 등의 정보를 **kwargs로 입력받아, key: value 형식으로 한 줄씩 출력하세요.

 

4. 문장 단어 수 세기

문제 설명 : 문장을 문자열로 입력받아, 공백 기준으로 단어를 나누고 단어 개수와 단어 리스트를 튜플로 반환하세요.

 

5. 계산기 함수 만들기

문제 설명 : 두 개의 숫자와 연산 기호(+, -, *, /)를 받아 계산을 수행하세요. 0으로 나눌 경우 에러 메시지를 반환하세요.