🌱
기초 (Basic)
def · return · 기본값 · 키워드 인수 · 스코프
9주차 — 함수 기초
def 로 함수를 정의하고 호출, 매개변수와 인수의 차이, 기본값/키워드 인수, return으로 값 반환, 그리고 지역/전역 변수의 스코프를 익힙니다.
함수defreturnscope
소요 시간
⏱ 2시간
난이도
📊 완전 초보
선수 조건
🎯 8주차
결과물
재사용 가능한 함수로 깔끔하게 분리된 작은 프로그램
이 강의에서 배우는 것
- 1def 로 함수를 정의하고 호출한다
- 2매개변수와 인수의 차이를 안다
- 3기본값 매개변수, 키워드 인수를 사용한다
- 4return 으로 값을 반환한다
- 5변수의 스코프(지역/전역)를 이해한다
1. 함수란
같은 동작을 여러 번 쓰지 않고 이름 붙여 재사용. 코드를 짧고 명확하게 만든다.
python
def greet(name):
print(f"안녕, {name}!")
greet("홍길동")
greet("김영희")2. 매개변수와 인수
- 매개변수(parameter): 함수 정의의 변수 (name)
- 인수(argument): 함수 호출 시 전달하는 값 ("홍길동")
python
def add(a, b): # a, b: 매개변수
return a + b
result = add(3, 5) # 3, 5: 인수3. return
함수가 값을 돌려줍니다. return 만나면 즉시 종료.
python
def square(x):
return x * x
n = square(5) # 25return 없으면 자동으로 None 반환.
4. 기본값 매개변수
호출 시 인수 생략하면 기본값 사용.
python
def greet(name, greeting="안녕"):
return f"{greeting}, {name}님!"
print(greet("길동")) # 안녕, 길동님!
print(greet("Alice", "Hello")) # Hello, Alice님!5. 키워드 인수
순서 대신 이름으로 전달.
python
def make_user(name, age, city):
return {"name": name, "age": age, "city": city}
# 위치 인수
u1 = make_user("홍길동", 20, "서울")
# 키워드 인수 (순서 무관, 가독성 좋음)
u2 = make_user(city="부산", name="김영희", age=25)6. 여러 값 반환 (튜플)
python
def min_max(nums):
return min(nums), max(nums)
lo, hi = min_max([3, 1, 4, 1, 5])
print(lo, hi) # 1 57. 변수 스코프
함수 안에서 만든 변수는 지역 변수 — 밖에서 안 보임.
python
def f():
x = 10 # 지역
print(x)
f()
# print(x) # NameError함수 안에서 전역 변수를 수정하려면 global 키워드:
python
total = 0
def add(n):
global total
total += n(가능하면 global 은 피하고, 함수가 값을 받아서 반환하는 형태 권장.)
8. 자주 하는 실수
1) 함수 호출에 () 빠뜨림
python
def hi():
print("hi")
hi # 함수 객체. 실행 안 됨
hi() # 실행2) return 없는데 결과 사용
python
def show(x):
print(x)
y = show(5) # y = None3) 기본값에 가변 객체
python
def add_to(item, lst=[]): # ⚠️ 함정!
lst.append(item)
return lst
add_to(1) # [1]
add_to(2) # [1, 2] — 같은 리스트 공유→ 기본값은 None 으로 두고 함수 안에서 새로 생성:
python
def add_to(item, lst=None):
if lst is None:
lst = []
...4) 이름 충돌
python
def list(): # 내장 list 가려짐
...→ print, list, sum 같은 내장 이름은 변수·함수명으로 쓰지 말 것.
9. FAQ
Q1. 함수는 몇 줄이 적절한가요?
권장 5~30줄. 너무 길면 더 작은 함수로 분리.
Q2. print 와 return 의 차이?
print 는 화면에 출력, return 은 값을 반환. 함수가 값 자체가 필요할 때는 return.
Q3. 함수 안에서 함수를 호출할 수 있나요?
네. 자신을 호출(재귀)도 가능 (중급에서 다룸).
💻 예제 (examples)
실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.
01_basic_function.py— 정의와 호출
CODE
def greet(name):
print(f"안녕, {name}!")
def add(a, b):
return a + b
greet("홍길동")
greet("김영희")
print(add(3, 5))
▶ 실행 결과
안녕, 홍길동!
안녕, 김영희!
802_default_args.py— 기본값 + 키워드 인수
CODE
def greet(name, greeting="안녕"):
return f"{greeting}, {name}님!"
print(greet("길동"))
print(greet("Alice", "Hello"))
print(greet(name="민수", greeting="반가워"))
▶ 실행 결과
안녕, 길동님!
Hello, Alice님!
반가워, 민수님!03_return.py— return / 여러 값 반환
CODE
def square(x):
return x * x
def min_max(nums):
return min(nums), max(nums)
print(square(5))
lo, hi = min_max([3, 1, 4, 1, 5])
print(lo, hi)
▶ 실행 결과
25
1 504_scope.py— 지역 변수 / global
CODE
total = 0
def add(n):
global total
total += n
add(10)
add(20)
print(total) # 30
def local_demo():
x = 100
print(x)
local_demo()
# print(x) # NameError
▶ 실행 결과
30
100📝 과제 (exercises)
직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.
과제 1
계산기 함수 모음
목표: 사칙연산 함수를 만들고 메뉴형 계산기로 사용한다.
요구사항
- 함수 4개: add, sub, mul, div
- div 는 0으로 나누면 None 반환 (또는 메시지)
- main 흐름: 메뉴 → 두 수 입력 → 결과 출력 → 종료
입출력 예시
[메뉴] 1.+ 2.- 3.* 4./ 5.종료
선택: 1
첫 번째 수: 10
두 번째 수: 5
결과: 15▶정답 코드 펼치기 / 접기
SOLUTION
def add(a, b): return a + b
def sub(a, b): return a - b
def mul(a, b): return a * b
def div(a, b):
if b == 0:
return None
return a / b
while True:
print("\n[메뉴] 1.+ 2.- 3.* 4./ 5.종료")
choice = input("선택: ")
if choice == "5":
break
a = float(input("첫 번째 수: "))
b = float(input("두 번째 수: "))
if choice == "1":
print("결과:", add(a, b))
elif choice == "2":
print("결과:", sub(a, b))
elif choice == "3":
print("결과:", mul(a, b))
elif choice == "4":
result = div(a, b)
print("결과:", "0으로 나눌 수 없습니다" if result is None else result)
▶ 실행 결과
[메뉴] 1.+ 2.- 3.* 4./ 5.종료
선택: 1
첫 번째 수: 10
두 번째 수: 5
결과: 15.0과제 2
입력 검증 함수
목표: is_valid_age(value) 함수를 만든다.
요구사항
- 0~120 사이의 정수면 True, 아니면 False
- 문자열이 들어와도 처리 ("abc" → False)
입출력 예시
True
True
True
False
False
False▶정답 코드 펼치기 / 접기
SOLUTION
def is_valid_age(value):
try:
n = int(value)
except (ValueError, TypeError):
return False
return 0 <= n <= 120
print(is_valid_age(20))
print(is_valid_age(0))
print(is_valid_age(120))
print(is_valid_age(-1))
print(is_valid_age(150))
print(is_valid_age("abc"))
▶ 실행 결과
True
True
True
False
False
False과제 3
소수 판별 함수
목표: is_prime(n) 함수를 작성하고, 1~50 중 소수만 출력한다.
요구사항
- 1과 0 이하: 소수 아님
- 2: 소수
- 짝수(2 제외): 소수 아님
- 그 외: 3부터 √n 까지 홀수로 나누어 보기
입출력 예시
1~50 사이의 소수:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47▶정답 코드 펼치기 / 접기
SOLUTION
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
i = 3
while i * i <= n:
if n % i == 0:
return False
i += 2
return True
primes = [str(n) for n in range(1, 51) if is_prime(n)]
print("1~50 사이의 소수:")
print(" ".join(primes))
▶ 실행 결과
1~50 사이의 소수:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47