Python : default value

m_ngyeong·2024년 10월 12일
0

Python

목록 보기
15/17
post-thumbnail

🐍 Python


기본값(default value)

기본값(default value)는 함수에서 인자를 전달하지 않았을 때 자동으로 사용되는 값을 말한다. 파이썬에서 함수 정의 시 인자의 기본값을 설정하면, 함수를 호출할 때 해당 인자를 생략해도 기본값이 사용된다.

기본값을 설정하는 이유

  • 함수를 호출할 때 일부 인자에 대해 기본적인 동작을 지정할 수 있게 함.
  • 인자를 선택적으로 사용할 수 있어 함수 호출을 더 간결하게 만듦.

기본값이 있는 함수 정의

함수를 정의할 때 기본값을 설정하려면 인자 뒤에 등호(=)를 사용하여 값을 할당하면 된다.

문법

def 함수이름(인자1=기본값1, 인자2=기본값2):
    함수내용
  • 기본값은 함수를 정의하는 시점에 한 번만 평가됨.
  • 기본값을 가진 인자는 기본값이 없는 인자 뒤에 나와야 하며 그렇지 않으면, SyntaxError가 발생.

예시

# 기본값을 가진 함수
def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

# 인자를 모두 제공
greet("Alice", "Hi")  # 출력: Hi, Alice!

# 기본값 사용 (greeting 인자 생략)
greet("Bob")  # 출력: Hello, Bob!

잘못된 예시

# 기본값이 없는 인자(name)가 뒤에 오면 오류 발생
def greet(greeting="Hello", name):
    print(f"{greeting}, {name}!")

예시들

예시 1: 기본값을 통한 선택적 인자 사용

# 두 번째 인자 b에 기본값 5를 설정
def add(a, b=5):
    return a + b

# 인자를 모두 제공
print(add(3, 4))  # 출력: 7

# 두 번째 인자 생략 (기본값 5 사용)
print(add(3))  # 출력: 8

예시 2: 기본값이 있는 인자를 여러 개 사용하는 함수

def describe_person(name, age=20, city="Unknown"):
    print(f"Name: {name}, Age: {age}, City: {city}")

# 모든 인자를 제공
describe_person("Alice", 25, "New York")
# 출력: Name: Alice, Age: 25, City: New York

# 일부 인자 생략 (기본값 사용)
describe_person("Bob")
# 출력: Name: Bob, Age: 20, City: Unknown

# 하나의 인자만 생략
describe_person("Charlie", 30)
# 출력: Name: Charlie, Age: 30, City: Unknown

예시 3: 기본값이 리스트나 딕셔너리일 때 주의 사항

기본값으로 리스트나 딕셔너리 같은 가변 객체를 사용할 때는 주의가 필요하다. 함수가 호출될 때마다 같은 객체가 공유되기 때문에, 의도하지 않은 동작이 발생할 수 있다.

def append_element(value, my_list=[]):
    my_list.append(value)
    return my_list

# 함수 호출 (기본값으로 빈 리스트가 사용됨)
print(append_element(1))  # 출력: [1]
print(append_element(2))  # 출력: [1, 2] (기존 리스트가 계속 유지됨)

# 해결 방법: None을 기본값으로 설정하고 내부에서 리스트를 생성
def append_element_safe(value, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(value)
    return my_list

# 함수 호출 (새로운 리스트가 매번 생성됨)
print(append_element_safe(1))  # 출력: [1]
print(append_element_safe(2))  # 출력: [2]
  • 기본값으로 가변 객체를 사용하면 모든 호출에서 해당 객체가 재사용되므로, 값이 누적되는 문제가 발생할 수 있음.
  • 기본값으로 None을 사용하여 함수 내부에서 새로운 객체를 생성하는 방식이 안전함.


profile
ʚȉɞ

0개의 댓글