PHYTHON

함수의 매개변수 종류와 특징수의 매개변수 종류와 특징

funfunweb 2025. 4. 3. 18:45

매개 변수는 함수 정의시 함수가 필요한 값을 받기 위한 변수입니다.

 

매개변수에는 필수 매개변수, 선택 매개벼수, 튜플 매개변수, 딕셔너리 매개변수가 있습니다.

 

필수 매개변수

**필수 매개변수 (Required Parameter)**는 함수 정의에서 기본적으로 값을 반드시 전달해야 하는 매개변수를 의미합니다. 함수 호출 시 필수 매개변수에 값이 제공되지 않으면 TypeError 오류가 발생합니다.

즉, 함수 정의에서 기본값이 설정되지 않은 매개변수는 호출 시 반드시 값을 제공해야 하는 매개변수입니다.

예시:

def add(a, b):
    return a + b

# 올바른 호출
print(add(3, 5))  # 출력: 8

# 잘못된 호출 (필수 매개변수에 값이 제공되지 않음)
# print(add(3))  # TypeError: add() missing 1 required positional argument: 'b'

위의 예시에서 add 함수는 a와 b라는 두 개의 필수 매개변수를 가집니다. 따라서 add(3)과 같이 호출하면 b에 해당하는 값이 제공되지 않아서 오류가 발생합니다.

필수 매개변수와 기본값 매개변수의 차이:

  • 필수 매개변수: 기본값이 없고, 반드시 호출 시 값을 전달해야 하는 매개변수.
  • 기본값 매개변수: 기본값을 설정하여 값이 전달되지 않으면 기본값이 사용됩니다.

기본값이 없는 매개변수는 필수 매개변수로 간주됩니다:

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

# 필수 매개변수인 name은 반드시 제공해야 합니다.
greet("Alice")  # 출력: Hello, Alice!
greet("Bob", "Good morning")  # 출력: Good morning, Bob!

따라서, 필수 매개변수는 기본값이 없는 매개변수입니다.

 

선택 매개변수

 

**선택 매개변수 (Optional Parameter)**는 함수 정의에서 기본값을 제공하여, 함수 호출 시 값을 생략할 수 있는 매개변수입니다. 선택 매개변수는 호출 시 값을 전달하지 않으면, 정의된 기본값을 사용하게 됩니다.

즉, 선택 매개변수는 함수 호출 시 인자를 전달하지 않아도 에러가 발생하지 않으며, 기본값이 자동으로 사용됩니다.

예시:

def greet(name, message="Hello"):
    print(f"{message}, {name}!")

# 선택 매개변수인 'message'에 값을 생략하면 기본값인 "Hello"가 사용됩니다.
greet("Alice")  # 출력: Hello, Alice!

# 'message'에 값을 제공하면 그 값이 사용됩니다.
greet("Bob", "Good morning")  # 출력: Good morning, Bob!

위의 코드에서, message는 선택 매개변수입니다. greet 함수를 호출할 때 message에 값을 제공하지 않으면, 기본값 "Hello"가 사용됩니다. 만약 message에 값을 제공하면, 그 값이 사용됩니다.

선택 매개변수의 특징:

  1. 기본값 제공: 선택 매개변수는 기본값이 설정되어 있으므로, 호출 시 해당 인자를 생략할 수 있습니다.
  2. 순서: 선택 매개변수는 필수 매개변수 뒤에 위치해야 합니다. 순서를 지키지 않으면 SyntaxError가 발생합니다.

잘못된 예시 (순서 오류):

# 잘못된 예시: 선택 매개변수가 필수 매개변수 앞에 오면 오류 발생
# def greet(message="Hello", name):  # SyntaxError
#    print(f"{message}, {name}!")

선택 매개변수와 기본값 매개변수:

  • 선택 매개변수: 기본값이 있어, 함수 호출 시 값을 생략할 수 있는 매개변수.
  • 기본값 매개변수: 기본값을 설정한 매개변수는 선택적으로 값을 전달할 수 있습니다.

선택 매개변수를 사용하는 이유:

  • 함수 호출 시 인자가 항상 필요한 것은 아니고, 기본값이 제공되는 경우에 유용하게 사용할 수 있습니다. 예를 들어, 사용자가 어떤 옵션을 선택할 수 있도록 하거나, 여러 인자 중 일부는 기본 설정을 그대로 사용하게 할 때 유용합니다.

예시 2: 여러 개의 선택 매개변수

def book_ticket(name, seat_type="economy", food_preference="vegetarian"):
    print(f"Booking ticket for {name}")
    print(f"Seat type: {seat_type}")
    print(f"Food preference: {food_preference}")

book_ticket("Alice")  # 기본값 사용
# 출력:
# Booking ticket for Alice
# Seat type: economy
# Food preference: vegetarian

book_ticket("Bob", "business", "non-vegetarian")  # 선택 매개변수에 값 전달
# 출력:
# Booking ticket for Bob
# Seat type: business
# Food preference: non-vegetarian

이처럼 선택 매개변수는 기본값을 제공함으로써 함수 호출 시 유연성을 제공합니다.

 

튜플 매개변수

매핑하고 남은 순서 인수를 스쿠핑해 저장하는 매개변수로  튜플 유형으로 저장

 

튜플 매개변수는 함수 정의에서 매개변수로 튜플을 받는 형태를 의미합니다. 즉, 함수가 하나의 튜플을 매개변수로 받아서 처리하는 경우입니다. 튜플은 여러 개의 값을 묶어 하나의 객체로 다룰 수 있는 자료형으로, 이를 함수의 인자로 사용할 수 있습니다.

1. 튜플 매개변수의 정의

튜플은 여러 값들을 하나로 묶은 불변(immutable) 시퀀스입니다. 함수에서 튜플 매개변수를 사용하면, 여러 값을 튜플로 전달할 수 있습니다.

예시: 튜플 매개변수 사용

def print_coordinates(coords):
    x, y = coords  # 튜플 언패킹
    print(f"X: {x}, Y: {y}")

# 튜플을 함수에 전달
point = (5, 10)
print_coordinates(point)  # 출력: X: 5, Y: 10

위 코드에서는 coords라는 매개변수가 튜플입니다. 함수 print_coordinates는 하나의 튜플을 받아서 그 튜플의 값을 언패킹하여 처리합니다.

2. 가변 위치 인자와 튜플

함수 정의에서 *args를 사용하면, 전달된 여러 인자들이 튜플로 묶여서 함수 내부에서 처리됩니다. 즉, *args는 가변 인자 리스트를 튜플로 받는 형태입니다.

예시: *args를 사용한 튜플 매개변수

def print_values(*args):
    for value in args:  # args는 튜플로 전달됨
        print(value)

# 여러 개의 인자를 전달하면 튜플로 묶여서 함수 내부로 전달됨
print_values(1, 2, 3, 4)  
# 출력:
# 1
# 2
# 3
# 4

위 코드에서 *args는 튜플로 인자들을 받습니다. 함수 호출 시 전달된 값들은 args라는 튜플로 묶여서 사용됩니다.

3. 튜플 매개변수와 기본값 매개변수

튜플을 매개변수로 사용할 때, 기본값을 지정할 수도 있습니다. 예를 들어, 기본값으로 빈 튜플을 지정하여 인자가 전달되지 않으면 빈 튜플로 처리하도록 할 수 있습니다.

예시: 기본값이 있는 튜플 매개변수

def print_items(items=()):
    if items:
        for item in items:
            print(item)
    else:
        print("No items to display")

# 기본값을 사용하는 경우
print_items()  # 출력: No items to display

# 튜플을 전달한 경우
print_items((1, 2, 3))  # 출력: 1, 2, 3

4. 튜플 언패킹 (Tuple Unpacking)

튜플 매개변수를 사용할 때, 함수 내부에서 튜플의 값을 개별 변수로 분리하는 "언패킹"을 사용할 수 있습니다.

예시: 튜플 언패킹

def print_full_name(name_tuple):
    first_name, last_name = name_tuple  # 튜플 언패킹
    print(f"First name: {first_name}, Last name: {last_name}")

name = ("John", "Doe")
print_full_name(name)  # 출력: First name: John, Last name: Doe

위 예시에서는 name_tuple을 튜플로 받고, 함수 내부에서 이를 언패킹하여 first_name과 last_name 변수로 분리하여 사용합니다.

요약

  • 튜플 매개변수: 함수에서 튜플을 매개변수로 받아서 여러 값을 묶어서 처리하는 방식입니다.
  • *args: 여러 개의 값을 튜플로 묶어 받을 수 있는 방법입니다.
  • 튜플 언패킹: 함수 내부에서 튜플의 값을 개별 변수로 분리하여 사용할 수 있습니다.

튜플 매개변수를 사용하면 함수에서 여러 값을 묶어서 처리할 수 있어 코드의 가독성과 유연성을 높일 수 있습니다.

 

 

딕셔너리 매개변수 : 매핑하고 남은 키워드 인수를 스쿠핑해 저장하는 매개변수 - 딕셔너리 유형으로 저장

 

딕셔너리 매개변수는 함수에서 딕셔너리를 매개변수로 받아 여러 값을 키-값 쌍으로 처리하는 형태입니다. 딕셔너리는 키와 값의 쌍으로 데이터를 저장하는 자료형으로, 함수에서 이를 매개변수로 받아 다양한 정보를 유동적으로 처리할 수 있습니다.

딕셔너리 매개변수를 사용하는 방법에는 두 가지 주요 방법이 있습니다:

1. 딕셔너리 매개변수 (**kwargs) 사용

**kwargs는 가변 키워드 인자를 처리하는 방법으로, 여러 개의 키-값 쌍을 함수 매개변수로 전달할 수 있게 해줍니다. kwargs는 함수 내부에서 딕셔너리 형태로 사용됩니다.

예시: **kwargs를 사용한 딕셔너리 매개변수

def print_info(**kwargs):
    for key, value in kwargs.items():  # kwargs는 딕셔너리 형태
        print(f"{key}: {value}")

# 키-값 쌍으로 여러 인자를 전달
print_info(name="Alice", age=25, city="New York")

# 출력:
# name: Alice
# age: 25
# city: New York
  • **kwargs는 키워드 인자 형태로 여러 개의 인자를 받을 수 있으며, 함수 내부에서 kwargs는 딕셔너리로 처리됩니다.
  • 키는 매개변수 이름에 해당하고, 값은 전달된 인자 값에 해당합니다.

2. 딕셔너리 직접 전달

함수에서 딕셔너리를 매개변수로 받아서 처리하는 방식입니다. 이 경우, 딕셔너리 인자를 함수 호출 시 직접 전달하여 처리할 수 있습니다.

예시: 딕셔너리 매개변수 사용

def print_person_info(person_info):
    for key, value in person_info.items():
        print(f"{key}: {value}")

# 딕셔너리를 함수에 전달
person = {"name": "Bob", "age": 30, "city": "Los Angeles"}
print_person_info(person)

# 출력:
# name: Bob
# age: 30
# city: Los Angeles
  • 여기서 person_info는 딕셔너리로 전달되며, 함수 내부에서 .items() 메서드를 사용하여 키-값 쌍을 처리합니다.

3. 딕셔너리 매개변수와 기본값 매개변수 함께 사용

딕셔너리 매개변수와 기본값을 함께 사용할 수 있습니다. 기본값을 설정해두면, 호출 시 인자를 전달하지 않아도 기본값이 사용됩니다.

예시: 기본값이 있는 딕셔너리 매개변수

def update_profile(profile, updates={"name": "Unknown", "age": 0}):
    profile.update(updates)  # 기존 프로필에 업데이트 추가
    print(profile)

# 기본값으로 업데이트가 제공되는 경우
profile = {"name": "Alice", "age": 25}
update_profile(profile)
# 출력: {'name': 'Alice', 'age': 25}

# 사용자 정의 업데이트를 전달하는 경우
update_profile(profile, {"age": 26, "city": "Paris"})
# 출력: {'name': 'Alice', 'age': 26, 'city': 'Paris'}
  • 위 예시에서는 updates라는 매개변수에 기본값을 설정했습니다. 기본값을 사용하면 인자가 제공되지 않았을 때 기본 업데이트가 적용됩니다. 인자가 제공되면 그 값으로 딕셔너리가 업데이트됩니다.

4. 딕셔너리 매개변수와 *args 함께 사용

*args와 **kwargs를 동시에 사용하여, 위치 인자와 키워드 인자를 동시에 처리하는 방법도 가능합니다.

예시: *args와 **kwargs 함께 사용

def display_data(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

display_data(1, 2, 3, name="Alice", age=25)

# 출력:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'name': 'Alice', 'age': 25}
  • *args는 위치 인자들을 튜플로 받고, **kwargs는 키워드 인자들을 딕셔너리로 받습니다. 두 가지를 동시에 처리할 수 있습니다.

요약

  • **kwargs: 함수에서 가변 키워드 인자를 받아서 딕셔너리 형태로 처리하는 방법입니다. 여러 개의 키-값 쌍을 동적으로 받을 수 있습니다.
  • 딕셔너리 매개변수: 함수 매개변수로 직접 딕셔너리를 받아서 처리하는 방법입니다.
  • 기본값과 함께 사용: 딕셔너리 매개변수에 기본값을 설정하여, 호출 시 인자가 전달되지 않으면 기본값을 사용할 수 있습니다.
  • *args와 함께 사용: 위치 인자와 키워드 인자를 동시에 처리할 수 있습니다.

딕셔너리 매개변수는 함수에 여러 개의 옵션을 전달할 때 매우 유용하며, **kwargs를 사용하면 더욱 유연하게 인자들을 처리할 수 있습니다.

 

인수(매개값, argument value) 는 함수 호출시 매개변수에 전달할 값을 의미합니다.

순서인수: 순서대로 매개변수에 매핑하는 인수

키워드 인수: 매개변수의 이름으로 해당 매개변수에 값을 매핑하는 인수

스쿠핑 : 한번에 퍼나르는 것을 의미

 

함수 정의시 선택 매개변수가 뒤에 나온다.

https://colab.research.google.com/drive/1LJF-6sb_gYZZpvDVZ_yysqCuJ-5NaHV8#scrollTo=3utpytnoReRU

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

매개변수의 기본값이 변수 일 경우

흔치 않은 형태이지만 이런 경우 함수 정의 시점에  변수에 전달된 값으로 평가된다.

나중에 값을 바꿔도 기본값은 전에 것으로 결과 나온다.

기본값은 반드시 문자열이 아니어도 된다.

list, none 값이 될수도있다.

4개 실행값이 모두 같다.
순서대로 매핑된다.

 

 

함수를 사용하면 구조적인 프로그래밍을 할수 있다.

return의 의미

함수의 목적 - 반복적인 코드, 복잡한 코드를 작성하고 그것에 이름을 붙여놓고 재사용하기 위한 것이다.

파이썬은 함수를 .py 파일 안에 정의(여러개를 만들어 놓을 수 있음) 이것을 (.py파일) 모듈이라 부른다.

패키지는 .py파일을 디렉토리 안에 모아둔 것

패키지>모듈>함수

 

함수는 어떤 (코드에서 실행하도록 만들어놓은)특정한 동작을 수행하고,  값을 반환하는 것리턴한다라고 표현한다.

그래서 리턴 문장은 RETURN 키워드가 사용됨.

함수의 RETURN 문장 뒤에는 함수의 다른 코드가 오면 안된다.

 

누구야 과자사와 그럴경우 과자를 사서 나에게 준다.

돈은 매개값

아이스크림 고르고 값 지불하고 아이스크림을 주는 것 

여기서 아이스크림은 리턴값

 

함수 정의할때는 매개변수

호출할때는 매개값, 인수, 인자

 

 

 

 

 

 

add함수는 튜플 매개변수 하나만 가지고 있는데 매개변수 종류가 튜플 매개변수만 있는 것은 아니다.

튜플 매개변수의 순서

필수 매개변수 뒤, 선택 매개변수 앞에 오도록 정의하는 것이 가장 좋습니다.

함수 정의에서 발생하는 오류의 원인은 ***L**과 seperator 매개변수의 순서 문제입니다.

문제 설명

파이썬에서 *L은 가변 위치 인자를 의미합니다. 즉, 여러 개의 인자를 튜플 형태로 받을 수 있도록 합니다. 그런데, *L 뒤에 seperator 매개변수가 오게 되면, **seperator**는 키워드 인자 형태로만 전달할 수 있습니다. 그러나, 호출 시 seperator를 위치 인자로 전달하려고 했기 때문에 오류가 발생한 것입니다.

해결 방법

*L은 반드시 위치 인자 뒤에 와야 하고, 키워드 인자는 그 뒤에 와야 합니다. 즉, seperator를 *L 앞에 두어야 합니다.

수정된 코드:

def concat(*L, seperator):  # *L은 위치 인자, seperator는 키워드 인자
    return seperator.join(L)  # seperator를 구분자로 사용하여 join

print(concat("earth", "marts", "venus", seperator="/"))

이렇게 **seperator**를 키워드 인자로 호출해야 오류가 발생하지 않습니다.

설명:

  • *L은 ("earth", "marts", "venus")처럼 여러 개의 값을 받습니다.
  • seperator="/"는 키워드 인자 형태로 전달됩니다.

따라서, 출력은 다음과 같습니다:

earth/marts/venus

핵심:

  • *L을 사용하여 가변 위치 인자를 받을 때는 **seperator**와 같은 키워드 인자는 마지막에 배치해야 합니다.
  • 키워드 인자는 호출 시 명시적으로 값을 전달해야 합니다.

 

딕셔너리 매개변수 - 매핑하고 남는 키워드 인수를 스쿠핑

 

 

필수 매개변수, 튜플 매개변수, 선택 매개변수, 딕셔너리 매개변수 순서이다.

함수 정의 순서 기억해야합니다.