별표라고 많이 부르는 *. 프로그래밍에선 곱연산에 사용되며, 아스타라고도 불린다. C계열 언어에서는 이를 네이밍한 알고리즘인 에이스타 알고리즘도 있지만, 우리는 기본 표기인 에스터리스크로 부르도록 하자.

일단은, 단순히 a와 b에 값을 집어넣어 출력하는 부분부터 복습해보자.

1
2
3
4
5
def test1():
  a = 1
  b = 2
  print(a, b)
test1()

넘겨받을 인자는 없이 그냥 test 함수 내에 a와 b를 출력하고 test 함수를 호출한다.

출력 결과: 1 2

이제는 본격적으로 에스터리스크를 사용할 시간이다.

에스터리스크의 기본 문법은 *args이지만, args는 아규먼츠의 약자이므로 우리는 저 자리에 내가 넣고 싶은 변수 이름을 리네이밍해도 된다. 여기서 나는 그냥 생각없이 c로 지었다.

1
2
3
def test2(\*c):
  for i, v in enumerate(c):
  print(f"결과 : 인덱스: {i}, 값: {v}")

자, test2가 c 앞에 있는 에스터리스크는 2개 이상의 인자를 받을 수 있게 해준다. 우리는 단지 c만 썼으니까 하나만 받아온다고 생각하지만, *가 붙으면 2개 이상을 받아와서 정렬할 수 있다.

우리는 이제 i에 인덱스, v에 밸류값을 받아올 것이다. 이를 위해 새로운 변수 2개를 만들자.

1
2
a = 4
b = 2

이제 변수를 가지고 식을 만들어보자.

1
test2(a + b, a \* b, divmod(a, b))

첫 번째 식은 더하기, 두 번째 식은 곱하기, 마지막 식은 a에서 b를 나누고 그 몫과 나머지를 구하는 식이다.

이제 이대로 출력해보자.

결과 : 인덱스: 0, 값: 6 결과 : 인덱스: 1, 값: 8 결과 : 인덱스: 2, 값: (2, 0)

인덱스는 당연히 순서대로 정렬되었고, 식 또한 알맞게 값이 들어갔다. divmod의 경우 튜플로 value값이 나와서 하나가 되어 들어간 것을 볼 수 있다.


그런데 우리는 *만이 들어간 걸 보진 않는다. 때때로 **가 들어간 걸 볼 때도 있다. 어 그럼 이건 뭐야? 할 수도 있다.

그것은 **kwargs라고 부른다. 키워드 아규먼츠의 약자이지만 그냥 kwargs로 퉁쳐서 쓰고 읽는다. 이것 역시 우리가 멋대로 별표 뒤에 따라오는 변수의 이름을 정할 수 있다.

그럼 얘는 어디에서 쓰느냐? 바로 dict(사전) 타입에서 쓴다.

곧바로 만들어볼까?

1
2
def test3(\*\*d):
  print(d)

이번에 넣을 데이터는 고길동이다. 나이 41세 키 170… 우리는 이것을 각각의 dict으로 만들어서 d에 넣고 싶다.

위의 args에서도 그랬지만 kwargs에서도 **만 붙여주면 마음껏 고길동의 데이터를 dict으로 만들어서 넣을 수 있다.

고길동만 하면 좀 허전하니까 둘리도 넣어보자.

1
2
test3(name="gil-dong Go", age=41, height=170)
test3(name="Dooly", age=7, height=120)

이제 출력만 해보면 된다.

{‘name’: ’gil-dong Go’, ’age’: 41, ’height’: 170} {‘name’: ’Dooly’, ’age’: 7, ’height’: 120}