함수(Function): 여러 문장(코드)를 묶어, 특정 로직을 재사용하거나 모듈화 위해 사용
파이썬에선 함수 정의를 위해 def 예약어를 사용하며, 함수 이름 뒤 소괄호 '()' 안에 매개변수(Parameter)를 적을 수 있어요
-----🐢
함수 기본 구조
def 함수이름(매개변수):
수행할 문장 ~
return 결과값 #선택 사항(필요시 반환)
return은 함수의 결과(return value)를 호출한 쪽으로 돌려줄 때 사용해요
만약 return문이 없으면 None을 반환합니다
#예시
def add(a, b):
return a + b
result = add(3, 4)
print(result) #7 출력
----🐢-
위치 인자 / 가변 인자
- Positional Arguments: 함수를 호출할 때, 순서대로 매개변수가 채워짐
- Keyword Arguments: 함수를 호출할 때, 매개변수 이름을 직접 지정하여 전달
def greet(name, msg):
print(f"{name}님, {msg}")
# 위치 매개변수 사용
greet("홍길동", "안녕하세요?")
# 키워드 매개변수 사용
greet(name="이몽룡", msg="반갑습니다!")
greet(msg="환영합니다!", name="성춘향")
---🐢--
매개 변수
- Non-default value parameter (기본값이 없는 매개변수)
# 함수를 정의할 때 def 함수이름(매개변수) 처럼 기본값을 지정해 주지 않은 매개변수
# 함수를 호출할 때는, 이 매개변수에 대응되는 인자(argument) 를 반드시 넘겨줘야
# 인자를 넘기지 않으면 TypeError가 발생
def greet(name):
print(f"Hello, {name}!")
# 이때 greet 함수를 호출할 때 'name' 인자를 반드시 넣어야 함
greet("Alice") # 정상: 출력 -> Hello, Alice!
greet() # 오류: TypeError: greet() missing 1 required positional argument: 'name'
- Default value parameter (기본값이 있는 매개변수)
# 함수 정의에서 def 함수이름(매개변수=기본값, ...)처럼, 매개변수에 미리 기본값을 지정해둔 형태
# 함수를 호출할 때, 해당 매개변수에 인자를 전달하지 않으면 기본값이 사용
#인자를 넘기면, 넘긴 값이 우선적으로 사용
def greet(name="Guest"):
print(f"Hello, {name}!")
greet("Alice") # Hello, Alice!
greet() # Hello, Guest! (기본값 "Guest" 사용)
🤔: 기본값이 있는 매개변수와 기본값이 없는 매개변수를 같이 사용 가능한가요? 사용 가능하다면 주의 사항이 있을까요?
🐢: 사용 가능합니다! 기본값 없는 매개변수는 반드시 기본값 있는 매개변수보다 앞에 와야 해요. value를 어디에 대입해야할지 몰라 오류가 발생할 수 있기 때문이죠!
--🐢---
*args와 **kwargs
- *args; 가변 (위치) 인자
# *args는 “위치 인자를 임의의 개수만큼 받겠다” 는 의미
# 함수 정의 시 매개변수에 *args를 적으면, 해당 함수는 여러 개의 positional argument(위치 인자)를 튜플 형태로 받을 수 있음
def print_numbers(*args):
print(args)
print_numbers(1, 2, 3) # (1, 2, 3)
print_numbers(10, 20) # (10, 20)
print_numbers("a", "b", "c") # ('a', 'b', 'c')
- **kwargs; 가변 키워드 인자
# **kwargs는 “키워드 인자를 임의의 개수만큼 받겠다” 는 의미
# 함수 정의 시 매개변수에 **kwargs를 적으면, 여러 개의 keyword argument(키=값 형태)를 딕셔너리 형태로 받을 수 있음
def print_info(**kwargs):
print(kwargs)
print_info(name="홍길동", age=30)
# 출력: {'name': '홍길동', 'age': 30}
print_info(city="서울", country="한국", zip_code=12345)
# 출력: {'city': '서울', 'country': '한국', 'zip_code': 12345}
-🐢----
람다(lambda) 예약어
# 짧은 함수를 간단히 표현할 때 람다(lambda) 사용
add_lambda = lambda x, y: x + y
print(add_lambda(3, 4)) # 7
🐢-----
함수 주의사항
- 함수의 리턴값은 언제나 하나
def add_mul(a, b):
return a + b, a * b
result = add_mul(3, 4) # result = (7, 12)
result1, result2 = add_mul(3, 4) # result1는 7, result2는 12
- 함수 안에서 선언한 변수는 함수 안에서만 사용하는 '함수만의 변수'
: 함수 밖의 변수에 영향 X
🤔: 그러면 함수 안에서 함수 밖의 변수를 어떻게 변경하나요?
🐢: 함수에서 return을 사용하거나, global 명령어를 사용하면 됩니다!
# return 사용
a = 1
def func(a):
a = a + 1
return a
a = func(a) # func(a)의 리턴값을 함수 밖의 변수 a에 대입
print(a)
# global 명령어 사용
a = 1
def func():
global a
a = a + 1
func()
print(a)
'언어 > Python' 카테고리의 다른 글
패키지(Package) (2) | 2025.01.01 |
---|---|
클래스/객체/인스턴스 (0) | 2025.01.01 |
리스트 컴프리헨션 (1) | 2024.12.30 |
딕셔너리/집합/불 자료형, 변수 알아보기 (2) | 2024.12.26 |
문자열 자료형/리스트 알아보기 (1) | 2024.12.26 |