별표라고 많이 부르는 *. 프로그래밍에선 곱연산에 사용되며, 아스타라고도 불린다. 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}