04 — LECTURE ·PY-09 ·2026.02.11

09. 함수

def와 return으로 재사용 가능한 함수를 정의한다

목차
  1. 학습 목표
  2. 1. 함수란?
  3. 정의
  4. 기본 구조
  5. 호출
  6. 파이썬 내장 함수 예시
  7. 2. 매개변수가 1개인 함수
  8. 개념
  9. 실습 9-1. 짝수/홀수 판별 함수
  10. 3. 매개변수가 여러 개인 함수
  11. 개념
  12. 실습 9-2. 선수 평가 함수
  13. 4. 가변 매개변수 (*args)
  14. 개념
  15. 실습 9-3. 과목 수에 상관없이 평균 구하기
  16. 5. 반환값 (return)
  17. 개념
  18. 실습 9-4. 원의 면적 계산 (return 사용)
  19. 실습 9-5. 스포츠 응용 — 농구 기여도 계산 함수
  20. 6. 값에 의한 호출 vs 레퍼런스에 의한 호출
  21. 값에 의한 호출 (숫자·문자열 등)
  22. 레퍼런스에 의한 호출 (리스트 등)
  23. 실습 9-6. 값에 의한 호출
  24. 실습 9-7. 레퍼런스에 의한 호출
  25. 7. 람다(Lambda) 함수
  26. 정의
  27. 문법
  28. 활용 상황
  29. 실습 9-8. 람다 함수 기본
  30. 8. 지역변수와 전역변수
  31. 구분
  32. global 키워드
  33. 실습 9-9. 지역변수 — 함수 밖에서 접근 불가
  34. 실습 9-10. 전역변수 — 함수 안에서 읽기 가능
  35. 실습 9-11. global 키워드 — 함수 내에서 전역변수 수정

스포츠 데이터로 배우는 파이썬 기초

학습 목표

  • 함수의 개념과 필요성 이해
  • def 로 함수 정의, 매개변수 전달
  • return 으로 결과값 반환
  • 가변 매개변수 *args 활용
  • 람다(lambda) 함수 작성
  • 지역변수 / 전역변수 / global 키워드 구분

1. 함수란?

정의

  • 특정 기능을 수행하는 코드 묶음
  • 반복되는 코드를 함수로 만들어 재사용

기본 구조

def 함수명(매개변수):
    실행할 코드
    return 결과값     # 생략 가능

호출

함수명(인수)

파이썬 내장 함수 예시

  • print() — 화면 출력
  • type() — 데이터 타입 확인
  • len() — 길이
  • input() — 키보드 입력
  • range() — 범위 생성

2. 매개변수가 1개인 함수

개념

  • 함수 정의 시 괄호 안에 매개변수(parameter) 지정
  • 호출 시 전달하는 값 = 인수(argument)

실습 9-1. 짝수/홀수 판별 함수

def even_odd(num):
    if num % 2 == 0:
        print('%d은(는) 짝수이다.' % num)
    else:
        print('%d은(는) 홀수이다.' % num)

even_odd(7)
even_odd(16)
7은(는) 홀수이다.
16은(는) 짝수이다.

3. 매개변수가 여러 개인 함수

개념

  • 매개변수를 콤마로 구분하여 여러 개 전달
  • 호출 시 순서대로 대응

실습 9-2. 선수 평가 함수

def evaluate_player(name, goals, rating):
    if rating >= 8:
        print(f'{name}: {goals}골, 평점 {rating} → MVP 후보!')
    elif rating >= 6:
        print(f'{name}: {goals}골, 평점 {rating} → 준수한 활약')
    else:
        print(f'{name}: {goals}골, 평점 {rating} → 분발 필요')

evaluate_player('손흥민', 23, 8.5)
evaluate_player('황희찬', 8, 6.2)
evaluate_player('조규성', 3, 5.1)
손흥민: 23골, 평점 8.5 → MVP 후보!
황희찬: 8골, 평점 6.2 → 준수한 활약
조규성: 3골, 평점 5.1 → 분발 필요

4. 가변 매개변수 (*args)

개념

  • 매개변수 개수가 정해지지 않았을 때 사용
  • *args → 함수 내부에서 튜플처럼 사용
  • 몇 개의 인수든 전달 가능

실습 9-3. 과목 수에 상관없이 평균 구하기

def average(*scores):
    total = 0
    for i in range(len(scores)):
        total += scores[i]
    avg = total / len(scores)
    print('%d과목의 평균: %.2f' % (len(scores), avg))

average(80, 90, 100)
average(75, 80, 94, 78)
average(80, 73, 76, 86, 82)
3과목의 평균: 90.00
4과목의 평균: 81.75
5과목의 평균: 79.40

5. 반환값 (return)

개념

  • return : 함수의 결과를 호출한 곳으로 돌려줌
  • 반환값을 변수에 저장해서 후속 계산에 활용 가능
  • return 이 없으면 None 반환

실습 9-4. 원의 면적 계산 (return 사용)

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

result1 = circle_area(10)
print('반지름 10 → 면적: %.2f' % result1)

result2 = circle_area(20)
print('반지름 20 → 면적: %.2f' % result2)
반지름 10 → 면적: 314.00
반지름 20 → 면적: 1256.00

실습 9-5. 스포츠 응용 — 농구 기여도 계산 함수

  • 공식 : 득점 + 리바운드×0.7 + 어시스트×1.2 - 턴오버×1.5
  • 계산 결과를 return 으로 반환
def calc_contribution(name, pts, reb, ast, to):
    score = pts + (reb * 0.7) + (ast * 1.2) - (to * 1.5)
    return round(score, 1)

curry = calc_contribution('Curry', 32, 5, 6, 3)
doncic = calc_contribution('Doncic', 30, 8, 8, 4)

print(f'Curry 기여도: {curry}')
print(f'Doncic 기여도: {doncic}')

if curry > doncic:
    print('더 높은 기여도: Curry')
else:
    print('더 높은 기여도: Doncic')
Curry 기여도: 38.2
Doncic 기여도: 39.2
더 높은 기여도: Doncic

6. 값에 의한 호출 vs 레퍼런스에 의한 호출

값에 의한 호출 (숫자·문자열 등)

  • 함수 내에서 매개변수 값을 변경해도 원본은 변하지 않음

레퍼런스에 의한 호출 (리스트 등)

  • 함수 내에서 리스트 요소를 변경하면 원본도 변함

실습 9-6. 값에 의한 호출

def func(x):
    x = 100
    print('func() 내부: x =', x)

x = 10
print('호출 전: x =', x)
func(x)
print('호출 후: x =', x)    # 원본 변하지 않음
호출 전: x = 10
func() 내부: x = 100
호출 후: x = 10

실습 9-7. 레퍼런스에 의한 호출

def func(x):
    x[0] = 100
    print('func() 내부: x =', x)

x = [1, 2, 3]
print('호출 전: x =', x)
func(x)
print('호출 후: x =', x)    # 원본도 변함!
호출 전: x = [1, 2, 3]
func() 내부: x = [100, 2, 3]
호출 후: x = [100, 2, 3]

7. 람다(Lambda) 함수

정의

  • 한 줄로 간단한 함수를 정의
  • 이름 없는 함수 (익명 함수)

문법

lambda 매개변수 : 표현식

활용 상황

  • 간단한 계산을 한 줄로 처리할 때
  • sort() 등의 key 인수로 자주 사용

실습 9-8. 람다 함수 기본

# 제곱 계산
square = lambda a: a ** 2
print(square(5))    # 25
print(square(10))   # 100
25
100
# 여러 매개변수
f = lambda x, y, z: x + y + z
print(f(10, 20, 30))    # 60

# 람다 + 팩토리 함수
def mul(n):
    return lambda x: x * n

double = mul(2)
triple = mul(3)
print(double(10))   # 20
print(triple(10))   # 30
60
20
30

8. 지역변수와 전역변수

구분

구분지역변수 (Local)전역변수 (Global)
선언 위치함수 내부함수 밖
유효 범위해당 함수 내에서만모든 곳에서 접근 가능
수명함수 호출 시 생성 → 종료 시 소멸프로그램 전체

global 키워드

  • 함수 내에서 전역변수를 수정하고 싶을 때 사용
  • 읽기만 할 때는 global 없이도 가능

실습 9-9. 지역변수 — 함수 밖에서 접근 불가

def func():
    x = 10    # 지역변수
    print('함수 내부:', x)

func()
# print(x)   # ← 주석 해제하면 NameError!
함수 내부: 10

실습 9-10. 전역변수 — 함수 안에서 읽기 가능

x = 10    # 전역변수

def func():
    print('함수 내부:', x)

print('함수 밖:', x)
func()
함수 밖: 10
함수 내부: 10

실습 9-11. global 키워드 — 함수 내에서 전역변수 수정

x = 10

def func():
    global x
    x = 100
    print('함수 내부:', x)

print('변경 전:', x)
func()
print('변경 후:', x)
변경 전: 10
함수 내부: 100
변경 후: 100