09. 함수
def와 return으로 재사용 가능한 함수를 정의한다
목차
- 학습 목표
- 1. 함수란?
- 정의
- 기본 구조
- 호출
- 파이썬 내장 함수 예시
- 2. 매개변수가 1개인 함수
- 개념
- 실습 9-1. 짝수/홀수 판별 함수
- 3. 매개변수가 여러 개인 함수
- 개념
- 실습 9-2. 선수 평가 함수
- 4. 가변 매개변수 (*args)
- 개념
- 실습 9-3. 과목 수에 상관없이 평균 구하기
- 5. 반환값 (return)
- 개념
- 실습 9-4. 원의 면적 계산 (return 사용)
- 실습 9-5. 스포츠 응용 — 농구 기여도 계산 함수
- 6. 값에 의한 호출 vs 레퍼런스에 의한 호출
- 값에 의한 호출 (숫자·문자열 등)
- 레퍼런스에 의한 호출 (리스트 등)
- 실습 9-6. 값에 의한 호출
- 실습 9-7. 레퍼런스에 의한 호출
- 7. 람다(Lambda) 함수
- 정의
- 문법
- 활용 상황
- 실습 9-8. 람다 함수 기본
- 8. 지역변수와 전역변수
- 구분
- global 키워드
- 실습 9-9. 지역변수 — 함수 밖에서 접근 불가
- 실습 9-10. 전역변수 — 함수 안에서 읽기 가능
- 실습 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