가변 길이 인수(variable-length argument)
함수를 호출할 때 전달하는 argument의 갯수가 다양하게 변하는 것
print 함수의 문서를 보자
*values 처럼 파라미터 이름 앞에 별표가 있는 경우, 그 함수를 호출할 때 argument가 두 개 이상 와도 되는 파라미터이다.
def fn_vararg(*varargs):
print(varargs)
for arg in varargs:
print(arg)
fn_vararg(1, 2, 3, 4)
실행 결과
(1, 2, 3, 4) # 가변길이 인수들은 tuple처럼 취급하면 된다
1
2
3
4
# 별표 두 개(**)를 붙이는 경우
def fn(**args):
pass
# 함수 호출시 argument의 키워드를 붙여주어야 함
fn(x = 1, y = 2)
def fn_vararg(*varargs):
print(*varargs)
실행 결과
1 2 3 4
>> print(*varagrs)
def summation(*args):
"""
임의의 갯수의 숫자들을 전달받아서 그 숫자들의 총합을 리턴하는 함수
:param args: 합계를 계산할 숫자들(갯수 제한 없음)
:return: 숫자들의 합
"""
f_sum = 0
for number in args:
f_sum += number
return f_sum
print(summation(1, 2, 3, 4, 5))
실행 결과
15
def fn_vararg2(a, *b):
print(f'a = {a}')
print(f'b = {b}')
# fn_vararg2() # a 값을 전달하지 않으면 에러 발생
fn_vararg2(1) # b는 가변길이 파라미터이므로 인수를 전달하지 않아도 됨
a는 반드시 1개의 argument가 필요, b는 안줘도 됨.
실행 결과
a = 1
b = ()
def fn_vararg3(*a, b):
print(f'a = {a}')
print(f'b = {b}')
fn_vararg3() # b 파라미터의 argument가 없으므로 에러
TypeError: fn_vararg3() missing 1 required keyword-only argument: 'b'
def fn_vararg3(*a, b):
print(f'a = {a}')
print(f'b = {b}')
# fn_vararg3() # b 파라미터의 argument가 없으므로 에러
# fn_vararg3(1) # TypeError: fn_vararg3() missing 1 required keyword-only argument: 'b' >> ??
# fn_vararg3(1, 2) # TypeError: fn_vararg3() missing 1 required keyword-only argument: 'b' >> ??
fn_vararg3(1,b= 2) # 출력 성공. keyword-only 는 반드시 b라고 지정해주어야 한다는 뜻
첫 번째 가변길이 파라미터가 모든 argument들을 가져가기 때문에, positional 방법으로는 argument를 뒷 parameter에 전달할 수 없다.
따라서 keyword 방식으로만 argument를 전달할 수 있다.
def calculator(*values, operator):
"""
operator가 '+'인 경우에는 values들의 합계를 리턴하고,
operator가 '*'인 경우에는 values들의 곱을 리턴하는 함수
:param values: ','로 구분한 계산할 숫자들을 나열
:param operator: '+' or '*'를 넣어준다(따옴표 필수)
:return: int 계산 결과값
"""
if operator == '+':
result = 0
for x in values:
result += x
return result
elif operator == '*':
result = 1
for x in values:
result *= x
return result
else:
print("+ 또는 *만 입력하세요.")
print(calculator(1, 2, 3, 4, operator='+'))
print(calculator(1, 2, 3, 4, operator='*'))
실행 결과
10
24
'Python > Python기초' 카테고리의 다른 글
Python 19_파이썬 메모리 모델 (0) | 2019.12.16 |
---|---|
Python 18_ 함수5 가변 길이 인수2 (0) | 2019.12.13 |
Python 16_ 함수3 positional argument, keyword argument, default argument (0) | 2019.12.11 |
Python 15_ 함수2 return값이 있는 함수 (0) | 2019.12.10 |
Python 14_ 함수1 함수의 정의 및 선언 (0) | 2019.12.09 |