가변인자(variable-length)와 Asterisk(*) | Python

유상준·2022년 9월 20일
0

args (가변인자)

  • "*args"를 변수명으로 사용
  • 보통 가장 마지막 파라미터에 추가된 형태로 입력
  • 기존 파라미터 이후에 입력하는 값들을 tuple 자료형으로 저장함
def args_test(a,b,*args):
    return a*b*max(args)

print(args_test(1,2,5,7,5,2,4))
# 14 = 1 * 2 * (max(5,7,5,2,4) = 7)

kargs(키워드 가변인자)

  • "**kargs"를 변수명으로 사용
  • 파라미터의 이름을 따로 지정하지 않고 입력하는 방법
  • 딕셔너리 자료형으로 저장됨
  • 머신러닝 프레임워크에서 특히 자주 쓰인다
  • "args"와 동시 사용 가능
    - 보통 기본 파라미터를 먼저 입력, 그 후에
    args를, 마지막으로 **kargs를 입력하는 형태
def kwargs_test(**kwargs):
    print(kwargs)
    
kwargs_test(mbti = 'entp', month = 9, day = 20, 한글 = '한글')
# {'mbti': 'entp', 'month': 9, 'day': 20, '한글': '한글'}
  • 신기하게도, 문자열처럼 따옴표(",')를 이용하지 않고 변수를 넣어줘도, 딕셔너리 키 값에는 문자열 자료형으로 들어간다
def kwargs_test2(a,b, *args, **kwargs):
    print(a + b + sum(args), f"| kwargs : {kwargs}")
    
kwargs_test2(21,13,-1,-2,-3, mbti = 'entp', month = 9, day = 20)
# 28 | kwargs : {'mbti': 'entp', 'month': 9, 'day': 20}

Asterisk (*)

  • unpacking의 용도로 자주 쓰임
  • 코딩테스트 볼 때, 출력물에서 많이 쓰였던 경험
    ex) 리스트의 원소를 한 칸씩 띄어서 출력해야 하는 경우

1차원 리스트, 튜플등을 unpacking : *

test = ['a','b','c']
print(*test)
# a b c

zip과 unpacking을 함께 쓰는 방법

  • ex) 인덱스별 합을 구하고 싶은데, for문은 돌리기 싫을 때
test = ([1,-1], [2,-2], [3,-3])
sum_of_idx = []
for value in zip(*test):
    print(value) 
    sum_of_idx.append(sum(value))
    
print(sum_of_idx)
# (1,2,3)
# (-1,-2,-3)
# [6,-6]
profile
데이터 사이언티스트 지망생

0개의 댓글