본문 바로가기

코딩/파이썬 기초

[Python] 파이썬 튜토리얼 019. 함수 매개변수에 별표 * 사용(*=애스터리스크, *args)

▶ 함수 매개변수에 별표 * 사용 (*=애스터리스크, *args)

python : 함수 : *args 매개변수

 

함수 정의 시 매개변수 앞에 별표(*, 애스터리스크)를 한 개 붙이면, 함수 호출 시 입력한 전달인자의 값이 튜플로 묶여 함수에 전달된다.

 

# python 3.9.5

def show_scores(*scores):
    print(type(scores))
    print(scores)

show_scores(10, 20, 30)

print()
show_scores(100, 110, 120, 130, 140, 150)

 

위의 코드를 실행하면, 그 출력은 아래와 같다.

 

전달인자를 *scores로 받기

 

위의 실행 결과에서 알 수 있듯이

함수의 매개변수 scores 앞에 별표(*) 하나를 붙이면, show_scores 함수 호출 시 입력한 값 10, 20, 30 또는 100, 110, 120, 130, 140, 150의 전달인자는 그 개수에 관계없이 하나의 튜플로 묶여 scores 매개변수에 전달된다.

 

위의 코드는 내장 함수(엄밀히 말해 클래스) type을 이용해 show_scores 함수의 매개변수 scores의 타입을 출력하는 코드를 포함한다.

 

튜플로 묶이는 전달인자의 값

▶ 함수의 전달인자에 별표 한 개(*)를 사용하면

별표 *가 앞에 붙은 매개변수를 함수의 전달인자로 사용할 때 별표(*)를 붙이는 경우와 붙이지 않는 경우 함수에 전달되는 값은 달라지게 된다.

 

예를 들어 아래의 코드와 같이

80, 85, 90, 95, 100의 값을 튜플로 받는 show_scores_1 함수의 socres 변수를 show_scores_2 함수의 전달인자로 사용할 때,

*scores로 표현하면 show_scores_2(80, 85, 90, 95, 100)와 같은 의미를 가지며,

별표가 없는 scores로 표현하면 show_scores_2 함수에 하나의 튜플을 전달하는 show_scores_2((80, 85, 90, 95, 100))와 같은 의미를 가지게 된다.

 

# python 3.9.5

def show_scores_1(name, *scores):
    print('** show_scores_1 **')
    print(name, *scores)
    print(name, scores)

    show_scores_2(*scores)
    show_scores_2(scores)

def show_scores_2(*scores):
    print()
    print('** show_scores_2 **')
    print(scores)

show_scores_1('student', 80, 85, 90, 95, 100)

 

위에서 설명한 것처럼, 위 코드의 실행 결과는 아래와 같다.

데이터 타입 튜플은 그 값이 하나일 때 (a, )와 같이 표현됨을 참고한다.

 

*scores를 전달인자로 사용할 때의 결과

▶ 함수의 반환값을 별표(*)로 받는다면

별표(*)는 함수의 반환값에 대해서도 사용할 수 있다.

 

아래의 코드에서 처럼 함수 func_1의 반환값 1은 r1에, 이후의 값은 r2에 대입된다. 

이때 r2의 데이터 타입은 리스트이다.

 

# python 3.9.5

def func_1():
    return 1, 'python', ['if', 'for', 'while']

r1, *r2 = func_1()

print(type(r1), r1)
print(type(r2), r2)

 

함수의 반환값을 별표로 받기