함수의 인자(argument)와 *(asterisk)의 용도
1. argument
1-1) keyword argument
함수에 parameter의 이름을 입력하여 값을 넘기는 방식
def f(x,y):
return x+y
f(1,2)
3
f(x=1,y=2) ###keyword argument
3
1-2) default argument
함수의 paramter의 기본값을 지정해놓은 방식
default가 없는 인자는 디폴트 인자 앞에 와야함
def f(x,y,z=4):
return x+y*z
f(1,2)
9
z에 값이 들어가지 않고 z=4인 기본값을 넣고 y=2를 넣은 것이라고 인식을 함
f(1,2,5)
11
z에 기본값인 z=4를 넣지 않고 z=5라고 사용자가 직접 지정을 해서 넣어줌
2. asterisk
2-1) variable-length
함수 정의에서 인자에 *표시가 붙은 인자는 가변인자임
다양한 argument와 함께 사용 가능하지만 가변인자는 오직 1개, 맨 마지막에 사용 가능
투입될때 튜플로 들어감
3,4,5,6이 args에 들어갈때는 (3,4,5,6)으로 들어간 모습
그러니까 a = 1, b = 2, args = (3,4,5,6)이 들어간다는 소리
type에서 튜플인것을 보고 알 수 있다
함수를 작성하는데 파라미터 개수가 정해지지 않았을 때, 도저히 파라미터 개수를 예상할 수 없을 때 가변인자를 사용
2-2) keyword variable - length
파라미터 이름을 따로 지정하기 어려울 때는 keyword 가변인자를 사용함
인자에 **표시를 하면 keyword 가변인자
오직 1개만 가능하고 * 가변인자 다음에, 즉 맨 마지막에 와야함
dict type으로 들어감
one,two라는 것이 인자로 있다고하더라도 이미 keyword로 입력해버리면 keyword 가변인자라고 생각해버림
one=1, two=2, first = 4, second = 5, third=6으로 넣으면 one, two라는 keyword argument에 1,2가 들어가고
first,second,third는 keyword 가변인자로 들어감
2-3) unpacking argument
*표시로 묶어서 넘겨주면 unpacking해서 인자에 넘겨준다
153줄은 *(2,3,4,5)로 *args에 넘길 때 2,3,4,5로 넘겨줌
그러나 *args에 의해 튜플 (2,3,4,5)로 args에 들어옴
함수 내 print(a,*args)에서 *args에서 다시 unpack이 일어남
왜냐하면 args=(2,3,4,5)인데 여기에 *이 붙어서 *(2,3,4,5) = 2 3 4 5가 되니까
154줄은 애초에 튜플 (2,3,4,5)로 들어가는데 가변인자 *args에 의해 다시 튜플화가 되어서
원소가 1개인 튜플 args = ((2,3,4,5),)가 되는 거임
그런데 함수 내 print(a,*args)에서 ((2,3,4,5),)가 unpack 되어 (2,3,4,5)가 되는거임
'프로그래밍 > Python' 카테고리의 다른 글
코딩테스트에서 유용한 list의 split과 join (0) | 2022.02.01 |
---|---|
파이썬(python)의 lambda, map, reduce (0) | 2022.01.29 |
파이썬(python)의 객체(object)와 클래스(class) (0) | 2022.01.27 |
파이썬(python)의 generator란? (0) | 2022.01.26 |
파이썬(Python) 프로그래밍 가이드라인 (0) | 2022.01.23 |