목차
- 함수와 매개변수
- 함수란?
- 매개 변수
- 자주 발생할 수 있는 실수들
- 다양한 매개 변수
- '기본' 매개 변수
- '가변' 매개 변수
- '키워드' 매개 변수
'기본' 매개 변수
기본 매개 변수는 함수 인수에 대한 기본값을 제공하는 데 사용되므로 함수를 호출할 때 선택 사항이 됩니다. 함수가 호출될 때 기본 매개변수에 대한 값이 제공되지 않으면 기본값이 대신 사용됩니다. 기본 매개변수는 일반적인 사용 사례에 적합한 기본값을 제공하여 기능을 보다 유연하고 사용하기 쉽게 만들 수 있습니다.
매개변수의 기본값을 지정하려면 함수를 정의할 때 할당 연산자(=) 뒤에 기본값을 사용하십시오. 기본 매개변수는 함수 정의에서 기본이 아닌(위치) 매개변수 다음에 나열되어야 합니다.
다음은 기본 매개변수의 개념을 설명하는 예입니다.
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
# 'greeting' 매개변수의 값을 제공하지 않고 함수 호출하기
greet("Alice") # Output: "Hello, Alice!"
# 'greeting' 매개변수에 값을 전달하며 함수 호출하기
greet("Bob", "Hi") # Output: "Hi, Bob!"
이 예에서 greet 함수에는 name(위치) 및 greeting(기본값)의 두 매개변수가 있습니다. greeting 매개변수의 기본값은 "Hello"입니다. greeting 매개변수에 대한 값을 제공하지 않고 greet 함수를 호출하면 기본값 "Hello"가 사용됩니다.
변경 가능한 객체(예: 목록 또는 사전)를 기본값으로 사용하면 이전 답변에서 언급한 것처럼 예기치 않은 동작이 발생할 수 있다는 점에 유의해야 합니다. 이 문제를 방지하려면 None을 기본값으로 사용하고 필요한 경우 함수 내부에 가변 객체를 생성하십시오.
다음은 기본 가변 객체를 적절하게 처리하는 방법의 예입니다.
def add_item(item, items_list=None):
if items_list is None:
items_list = []
items_list.append(item)
return items_list
이 예에서 items_list 매개변수의 기본값은 None입니다. 함수 내에서 items_list가 None이면 항목을 추가하기 전에 새 목록이 생성됩니다. 이렇게 하면 변경 가능한 기본값을 사용하여 발생하는 예기치 않은 동작을 방지하여 각 함수 호출에 대해 별도의 목록이 생성됩니다. 이 코드를 사용하는 방법은 다음과 같습니다.
# 새 목록에 첫 번째 항목 추가
new_list = add_item("사과")
print(new_list) # 출력: ["사과"]
# 동일한 목록에 두 번째 항목 추가
existing_list = ["바나나"]
new_list = add_item("체리", existing_list)
print(new_list) # 출력: ["바나나", "체리"]
# 동일한 목록에 세 번째 항목 추가
new_list = add_item("데이트", existing_list)
print(new_list) # 출력: ["바나나", "체리", "데이트"]
'가변' 매개 변수
가변 매개변수를 사용하면 함수가 다양한 수의 인수를 허용할 수 있습니다. 변수 매개변수에는 *args 및 **kwargs의 두 가지 유형이 있습니다. 이들은 각각 가변 개수의 위치 및 키워드 인수를 함수에 전달하는 데 사용됩니다.
*args: *args 구문을 사용하면 함수가 임의 개수의 위치 인수를 허용할 수 있습니다. 추가 위치 인수를 튜플로 수집합니다. 예를 들면 다음과 같습니다.
def print_args(*args):
for i, arg in enumerate(args):
print(f"Argument {i + 1}: {arg}")
print_args(1, "Hello", 3.14, [1, 2, 3])
Output:
Argument 1: 1
Argument 2: Hello
Argument 3: 3.14
Argument 4: [1, 2, 3]
**kwargs: **kwargs 구문을 사용하면 함수가 임의 개수의 키워드 인수를 허용할 수 있습니다. 추가 키워드 인수를 사전으로 수집합니다. 예를 들면 다음과 같습니다.
def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_kwargs(name="Alice", age=30, city="New York")
Output:
name: Alice
age: 30
city: New York
단일 함수에서 *args 및 **kwargs를 결합하여 위치 및 키워드 인수의 모든 조합을 허용할 수도 있습니다.
def print_all_args(*args, **kwargs):
for i, arg in enumerate(args):
print(f"Positional argument {i + 1}: {arg}")
for key, value in kwargs.items():
print(f"Keyword argument {key}: {value}")
print_all_args(1, 2, 3, name="John", age=25)
Output:
Positional argument 1: 1
Positional argument 2: 2
Positional argument 3: 3
Keyword argument name: John
Keyword argument age: 25
가변 매개변수는 함수를 정의할 때 유연성을 제공하여 더 재사용 가능하고 적응 가능한 코드를 생성할 수 있도록 합니다.
'키워드' 매개 변수
Python에서 키워드 매개변수는 위치에만 의존하지 않고 매개변수 이름을 사용하여 함수에 인수를 전달하는 방법입니다. 키워드 인수는 각 인수의 목적을 이해하기 쉽기 때문에 함수 호출을 더 읽기 쉽게 만듭니다. 또한 매개변수 이름을 제공하는 한 임의의 순서로 인수를 지정할 수 있습니다.
다음은 키워드 매개변수의 개념을 설명하는 예입니다.
def calculate_area(length, width):
return length * width
# 위치 인자를 사용하여 함수 호출하기
area_1 = calculate_area(10, 5) # 출력: 50
# 키워드 인자를 사용하여 함수 호출하기
area_2 = calculate_area(length=10, width=5) # 출력: 50
area_3 = calculate_area(width=5, length=10) # 출력: 50
이 예에서 calculate_area 함수에는 length와 width라는 두 개의 매개변수가 있습니다. 함수를 호출할 때 위치 인수(함수 정의의 매개변수와 동일한 순서로 값을 제공하여) 또는 키워드 인수(매개변수 이름 및 해당 값을 제공하여)를 사용할 수 있습니다. 키워드 인수는 어떤 값이 어떤 매개변수에 해당하는지 명확하게 하며 어떤 순서로든 제공될 수 있습니다.
키워드 매개변수는 함수에 기본값이 있는 여러 매개변수가 있을 때 특히 유용합니다. 앞의 모든 매개변수에 대한 값을 제공하지 않고도 특정 매개변수에 대한 값을 제공할 수 있습니다. 예를 들어:
def print_details(name, age=0, city="Unknown"):
print(f"Name: {name}, Age: {age}, City: {city}")
# 위치 인자와 키워드 인자를 혼용하여 함수 호출하기
print_details("Alice", city="New York") # 출력: "Name: Alice, Age: 0, City: New York"
이 예에서 print_details 함수에는 name(위치), age(기본값) 및 city(기본값)의 세 가지 매개변수가 있습니다. 함수를 호출할 때 키워드 인수를 사용하여 age 매개변수에 대한 값을 제공할 필요 없이 이 경우 city와 같은 특정 매개변수에 대한 값을 제공할 수 있습니다.
'Python > Python 기본' 카테고리의 다른 글
[Python] 재귀함수란? (0) | 2023.04.29 |
---|---|
[Python] 리턴 값(return value)이란? (0) | 2023.04.29 |
[Python] 파이썬에서 함수와 매개 변수 (1) (0) | 2023.04.27 |
[Python] while 반복문 사용법과 예 (0) | 2023.04.25 |
[Python] For문과 다른 함수 복합사용 방법(range, list) (0) | 2023.04.25 |