가변 인자

  • 가변 위치인자(*args): 임의 개수의 위치 인자를 tuple 형태의 변수로 저장
  • 가변 키워드인자(**kwargs): 임의 개수의 키워드인자를 dictionary 형태로 저장
# 가변 위치 인자(*args) 예제 1
def variable_length(a, b, *args):
    print(a)
    print(b)
    print(args)


variable_length(1, 2, 3, 4, 5) # 3, 4, 5는 *args에 들어감
# 결과
1
2
(3, 4, 5)
# 가변 위치 인자(*args) 예제 2
def asterisk_test(a, *args):
    print(a, args)
    print(type(args))


asterisk_test(1, 2, 3, 4, 5, 6)
# 결과
1 (2, 3, 4, 5, 6)
<class 'tuple'>
# 가변 키워드 인자(**kwargs) 예제1
def key_variale_length(**kwargs):
    print(kwargs)		# unpacking
    print("First value is {first}".format(**kwargs))
    print(f"First value is {kwargs.get('first')}")
    print("Second value is {second}".format(**kwargs))
    print("Third value is {third}".format(**kwargs))


key_variale_length(first=3, second=4, third=5)
# 결과
{'first': 3, 'second': 4, 'third': 5}
First value is 3
First value is 3
Second value is 4
Third value is 5
# 가변 키워드 인자(**kwargs) 예제2
def asterisk_test2(a, **kwargs):
    print(a, kwargs)
    print(type(kwargs))


asterisk_test2(1, b=2, c=3, d=4, e=5, f=6)
# 결과
1 {'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
<class 'dict'>
# unpacking
def unpacking_test(a, args):
    print(a, *args)     # unpacking
    print(type(args))


unpacking_test(1, (2, 3, 4, 5, 6))


def unpacking_test(a, *args):
    print(a, args)
    print(*args)		#unpacking
    print(type(args))

unpacking_test(1, 2, 3, 4, 5, 6)
# 결과
1 2 3 4 5 6
<class 'tuple'>
1 (2, 3, 4, 5, 6)
2 3 4 5 6
<class 'tuple'>
tom_score = [95, 85, 90]
jane_score = [90, 90, 100]
kate_score = [100, 100, 80]
students_scores = [tom_score, jane_score, kate_score]
tom_total = 0
jane_total = 0
kate_total = 0

for tom, jane, kate in zip(*students_scores):
    tom_total += tom
    jane_total += jane
    kate_total += kate

print(tom_total / 3, jane_total / 3, kate_total / 3)

# 결과
# 90.0 93.33333333333333 93.33333333333333

Packing과 Unpacking

colors = ['red', 'blue', 'green'] # packing
a, b, c = colors # unpacking
print(a, b, c)
colors = ['red', 'blue', 'green'] # packing
a, _, c = colors # unpacking
print(a, c)
def unpacking_dict(a, b, c, d):
    print(a, b, c, d)

data = {'b': 1, 'c': 2, 'd': 3}
unpacking_dict(10, **data)