Menu
Coddy logo textTech

*args

Coddy Python 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 64개 중 42번째.

*args 매개변수를 사용하면 메서드가 개수에 관계없이 위치 인수를 받을 수 있습니다. 별표는 추가 위치 인수를 모두 튜플로 수집합니다.

다음은 *args를 사용하는 메서드의 예입니다:

class Calculator:
    def add_numbers(self, *args):
        return sum(args)
    
    def show_numbers(self, *args):
        for i, num in enumerate(args):
            print(f"Number {i+1}: {num}")

서로 다른 개수의 인수로 메서드를 호출하세요:

calc = Calculator()
result1 = calc.add_numbers(1, 2, 3)
result2 = calc.add_numbers(10, 20, 30, 40, 50)
print(result1)  # 6
print(result2)  # 150

*args는 모든 인수를 튜플로 수집합니다:

calc.show_numbers(5, 10, 15, 20)

출력:

Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20

일반 매개변수를 *args와 결합합니다:

class Logger:
    def log_message(self, level, *messages):
        print(f"[{level}]", end=" ")
        for message in messages:
            print(message, end=" ")
        print()  # 새 줄

logger = Logger()
logger.log_message("INFO", "User", "logged", "in")
logger.log_message("ERROR", "Connection", "failed")

생성자 메서드에서 *args를 사용하세요:

class Team:
    def __init__(self, team_name, *players):
        self.team_name = team_name
        self.players = list(players)
    
    def show_team(self):
        print(f"Team: {self.team_name}")
        for player in self.players:
            print(f"- {player}")

team = Team("Warriors", "Alice", "Bob", "Charlie", "Diana")
team.show_team()

출력:

6
150
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20
[INFO] User logged in 
[ERROR] Connection failed 
Team: Warriors
- Alice
- Bob
- Charlie
- Diana

메서드를 호출할 때 인수를 언패킹할 수도 있습니다:

numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers)  # 리스트를 언팩합니다
print(result)  # 15

핵심 사항: *args는 임의의 개수의 위치 인수를 튜플로 수집합니다. 메서드에 몇 개의 인수가 전달될지 모를 때 사용하세요. args라는 이름은 관례적입니다. 별표 뒤에는 어떤 이름이든 사용할 수 있지만, args가 표준입니다.

challenge icon

챌린지

쉬움

이 과제에서는 유연한 숫자 유틸리티 함수를 구현합니다.

number_utils.py 파일을 수정하여 여러 개의 숫자 인수를 받을 수 있고 그 합을 반환하는 sum_all_numbers 함수를 구현하세요. 함수는 다음과 같이 동작해야 합니다.

  • 인수가 제공되지 않으면 0을 반환합니다.
  • 숫자가 아닌 인수가 하나라도 제공되면 "Error: All arguments must be numbers"를 출력하고 None을 반환합니다.
  • 불리언 값(True / False)은 여기에서 숫자로 간주하지 않으며, boolint의 하위 클래스임에도 불구하고 반드시 거부해야 합니다.

number_utils.py 파일에는 구현을 안내하는 자세한 TODO 주석이 포함되어 있습니다. 모든 요구 사항을 충족하는지 확인하기 위해 이 주석을 주의 깊게 따르세요.

직접 해보기

from number_utils import sum_all_numbers

# 포괄적인 테스트 케이스 핸들러
test_case = input()

if test_case == "basic_test":
    # 양의 정수로 기본 기능 테스트
    print(sum_all_numbers(1, 2, 3))  # 6을 반환해야 함
    print(sum_all_numbers())  # 0을 반환해야 함
    print(sum_all_numbers(10, 20, 30, 40))  # 100을 반환해야 함
    print(sum_all_numbers(1, 2, "three"))  # 오류를 출력하고 None을 반환해야 함

elif test_case == "float_test":
    # 부동 소수점 숫자로 테스트
    print(sum_all_numbers(1.1, 2.2, 3.3))  # 6.6을 반환해야 함
    print(sum_all_numbers(5.5, 5.0))  # 10.5를 반환해야 함

elif test_case == "mixed_numbers_test":
    # 정수와 실수의 혼합으로 테스트
    print(sum_all_numbers(5, 5.5))  # 10.5를 반환해야 함
    print(sum_all_numbers(10, 20.5, 30, 40))  # 100.5를 반환해야 함

elif test_case == "zero_values_test":
    # 0 값으로 테스트
    print(sum_all_numbers(0, 0, 0))  # 0을 반환해야 함
    print(sum_all_numbers(0))  # 0을 반환해야 함
    print(sum_all_numbers())  # 0을 반환해야 함

elif test_case == "negative_values_test":
    # 음수 값으로 테스트
    print(sum_all_numbers(-1, -2, -3))  # -6을 반환해야 함
    print(sum_all_numbers(-5, -5))  # -10을 반환해야 함
    print(sum_all_numbers(-5, 5))  # 0을 반환해야 함

elif test_case == "large_values_test":
    # 매우 큰 값으로 테스트
    print(sum_all_numbers(1000000000, 1000000000))  # 2000000000을 반환해야 함
    print(sum_all_numbers(1000000000, 2000000000.5))  # 3000000000.5를 반환해야 함

elif test_case == "single_value_test":
    # 단일 값으로 테스트
    print(sum_all_numbers(5))  # 5를 반환해야 함
    print(sum_all_numbers(-10))  # -10을 반환해야 함
    print(sum_all_numbers(3.5))  # 3.5를 반환해야 함

elif test_case == "error_handling_test":
    # 다양한 비숫자 값으로 테스트
    print(sum_all_numbers("string"))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers([1, 2, 3]))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers({"key": "value"}))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers(True))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers(None))  # 오류를 출력하고 None을 반환해야 함

elif test_case == "mixed_valid_invalid_test":
    # 유효한 값과 유효하지 않은 값의 혼합으로 테스트
    print(sum_all_numbers(1, 2, "three"))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers(1, [2, 3], 4))  # 오류를 출력하고 None을 반환해야 함
    print(sum_all_numbers(1.5, "two", 3))  # 오류를 출력하고 None을 반환해야 함

elif test_case == "empty_args_test":
    # 인수 없이 테스트
    print(sum_all_numbers())  # 0을 반환해야 함
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러