본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
Ch 9. 함수란 무엇일까요?
파이썬 함수의 모든 것
파이썬을 배우다 보면 반복되는 코드를 계속 복사-붙여넣기 하고 있는 자신을 발견할 때가 있습니다. 바로 이럴 때, 우리를 구원해 줄 마법 같은 도구가 바로 함수(Function)입니다. 함수는 특정 작업을 수행하는 코드 덩어리에 이름을 붙여두고, 필요할 때마다 호출해서 사용할 수 있게 해주는 기능입니다.
이번 글에서는 함수가 왜 필요한지부터 시작해서, 직접 함수를 만들고 활용하는 방법까지 차근차근 알아보겠습니다.
1. 함수, 도대체 왜 사용해야 할까요?
커피를 마시고 싶을 때마다 원두를 갈고, 물을 끓이고, 필터를 내리는 모든 과정을 직접 하진 않죠. 우리는 '커피 머신'의 버튼을 누릅니다. 여기서 커피 머신이 바로 함수의 역할입니다.
- 재사용성: 한번 잘 만들어둔 함수는 필요할 때마다 몇 번이고 다시 불러 쓸 수 있습니다.
- 가독성: 복잡한 코드를 의미 있는 단위의 함수로 나누면, 전체 코드의 흐름을 이해하기 훨씬 쉬워집니다. prepare_data(), analyze_data(), visualize_results()처럼요.
- 유지보수: 특정 기능에 수정이 필요할 때, 해당 함수만 고치면 되므로 유지보수가 매우 편리해집니다.
2. 함수의 기본: 정의하고 호출하기
함수를 만드는 것을 '정의(Define)'한다고 하고, 사용하는 것을 '호출(Call)'한다고 합니다.
함수 정의하기
def 키워드를 사용하여 함수를 정의합니다.
# '안녕하세요!'를 출력하는 가장 간단한 함수
def say_hello():
print("안녕하세요! 파이썬 함수에 오신 것을 환영합니다.")
함수 호출하기
정의된 함수의 이름을 적고 괄호()를 붙여 호출합니다.
# 위에서 정의한 함수를 호출
say_hello()
# 결과:
# 안녕하세요! 파이썬 함수에 오신 것을 환영합니다.
3. 정보를 전달하는 방법: 매개변수(Parameter)와 인수(Argument)
함수에 데이터를 전달하여, 그 데이터에 따라 다른 작업을 수행하게 만들 수 있습니다.
- 매개변수(Parameter): 함수를 정의할 때, 괄호 안에 선언하는 변수입니다. (함수가 받을 데이터의 '자리표')
- 인수(Argument): 함수를 호출할 때, 괄호 안에 전달하는 실제 값입니다. (자리에 들어갈 '실제 데이터')
# name이라는 매개변수를 받는 함수 정의
def greet(name):
print(f"{name}님, 환영합니다!")
# 함수를 호출하며 '앨리스'와 '밥'이라는 인수를 전달
greet("앨리스")
greet("밥")
# 결과:
# 앨리스님, 환영합니다!
# 밥님, 환영합니다!
4. 결과를 돌려받는 방법: return
함수가 어떤 작업을 수행한 후, 그 결과값을 돌려주게 하려면 return을 사용합니다. return을 만나면 함수는 즉시 실행을 종료하고 값을 반환합니다.
# 두 숫자를 더한 결과를 반환하는 함수
def add(a, b):
result = a + b
return result
# 함수를 호출하고, 반환된 값을 sum_result 변수에 저장
sum_result = add(10, 5)
print(f"10과 5를 더한 결과는 {sum_result}입니다.")
# 결과:
# 10과 5를 더한 결과는 15입니다.
Tip! return이 없는 함수는 보이지 않게 None이라는 특별한 값을 반환합니다.
5. 똑똑하게 매개변수 사용하기 (고급 팁)
기본값(Default) 매개변수
매개변수에 기본값을 설정해두면, 함수 호출 시 해당 인수를 생략할 수 있습니다.
def greet_default(name, message="안녕하세요"):
print(f"{name}님, {message}.")
greet_default("찰리") # message 인수를 생략 -> 기본값 "안녕하세요" 사용
greet_default("데이브", "반갑습니다") # message 인수를 전달 -> "반갑습니다" 사용
# 결과:
# 찰리님, 안녕하세요.
# 데이브님, 반갑습니다.
키워드(Keyword) 인수
인수의 순서가 헷갈릴 때, 매개변수 이름을 직접 지정하여 값을 전달할 수 있습니다. 코드의 가독성이 높아집니다.
def get_profile(name, age, country):
print(f"이름: {name}, 나이: {age}, 국가: {country}")
# 순서대로 전달
get_profile("Eve", 30, "한국")
# 키워드 인수로 순서 상관없이 전달
get_profile(country="미국", name="Frank", age=25)
가변 인수 (*args, **kwargs)
함수가 몇 개의 인수를 받을지 모를 때 사용합니다.
- *args: 여러 개의 인수를 **튜플(Tuple)**로 받습니다.
- **kwargs: 여러 개의 키워드 인수를 **딕셔너리(Dictionary)**로 받습니다.
# *args 예시: 모든 인수를 더하기
def sum_all(*numbers):
total = 0
for num in numbers:
total += num
return total
print(sum_all(1, 2, 3, 4, 5)) # 결과: 15
# **kwargs 예시: 프로필 정보 출력하기
def print_profile(**user_info):
for key, value in user_info.items():
print(f"{key}: {value}")
print_profile(name="Grace", age=28, job="Developer", country="캐나다")
람다(Lambda) 함수란?
람다 함수는 이름이 없는 '익명 함수(Anonymous Function)'입니다. def 키워드를 사용하여 정식으로 함수를 정의할 필요 없이, 한 줄로 간단한 함수를 만들고 싶을 때 사용합니다.
기본 문법
lambda 매개변수1, 매개변수2, ... : 표현식
- lambda 키워드로 시작합니다.
- 매개변수들을 나열하고 콜론(:)을 찍습니다.
- 콜론 뒤에는 이 매개변수들을 사용하여 계산하고 반환할 하나의 표현식이 옵니다. return 키워드는 사용하지 않아도 표현식의 결과가 자동으로 반환됩니다.
일반 함수 vs 람다 함수
예를 들어, 두 숫자를 더하는 간단한 함수를 비교해 보겠습니다.
1. 일반 함수 (def 사용)
def add(x, y):
return x + y
result = add(10, 20)
print(result) # 30
2. 람다 함수 사용
# 람다 함수를 변수에 할당
add_lambda = lambda x, y: x + y
result = add_lambda(10, 20)
print(result) # 30
보시는 것처럼, 간단한 기능의 경우 람다를 사용하면 코드를 훨씬 간결하게 표현할 수 있습니다.
람다 함수는 언제 사용할까요?
람다 함수는 주로 다른 함수의 **인수(argument)**로 함수를 전달해야 할 때 매우 유용하게 사용됩니다. 대표적인 예시는 map(), filter(), sorted() 같은 내장 함수들입니다.
예시: map() 함수와 함께 사용하기
map(함수, 리스트)는 리스트의 각 요소에 함수를 적용하여 새로운 결과를 만들어주는 함수입니다.
numbers = [1, 2, 3, 4, 5]
# 각 숫자를 제곱하는 람다 함수를 map에 전달
squared_numbers = list(map(lambda x: x * x, numbers))
print(squared_numbers)
# 결과: [1, 4, 9, 16, 25]
만약 람다를 쓰지 않았다면, 아래처럼 별도의 def 함수를 만들어야 합니다.
def square(x):
return x * x
squared_numbers = list(map(square, numbers))
이처럼 한 번만 쓰고 말 간단한 함수를 위해 def로 정식 함수를 정의하는 것이 번거로울 때, 람다를 사용하면 코드가 훨씬 깔끔하고 직관적이 됩니다.
오늘의 실습
#패스트캠퍼스 #환급챌린지 #패스트캠퍼스후기 #습관형성 #직장인자기계발 #오공완
https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr