반응형

목차

  1. 함수와 매개변수
    1. 함수란?
    2. 매개 변수
    3. 자주 발생할 수 있는 실수들
  2. 다양한 매개 변수
    1. '기본' 매개 변수
    2. '가변' 매개 변수
    3. '키워드' 매개 변수

'기본' 매개 변수

기본 매개 변수는 함수 인수에 대한 기본값을 제공하는 데 사용되므로 함수를 호출할 때 선택 사항이 됩니다. 함수가 호출될 때 기본 매개변수에 대한 값이 제공되지 않으면 기본값이 대신 사용됩니다. 기본 매개변수는 일반적인 사용 사례에 적합한 기본값을 제공하여 기능을 보다 유연하고 사용하기 쉽게 만들 수 있습니다.

매개변수의 기본값을 지정하려면 함수를 정의할 때 할당 연산자(=) 뒤에 기본값을 사용하십시오. 기본 매개변수는 함수 정의에서 기본이 아닌(위치) 매개변수 다음에 나열되어야 합니다.

다음은 기본 매개변수의 개념을 설명하는 예입니다.

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와 같은 특정 매개변수에 대한 값을 제공할 수 있습니다.

반응형