함수의 인자(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)가 되는거임

 

TAGS.

Comments